Java如何实现代码在指定时间内执行完毕

文章讲述了在开发中遇到Redis连接超时的问题,尽管设置了Spring的`spring.redis.timeout`为1秒,但实际异常发生在10秒后。为了解决这个问题,开发者使用了Java8和Java9的CompletableFuture特性,通过异步处理和设置超时时间(1500毫秒或1秒)来确保操作在预定时间内完成,从而避免长时间等待导致的延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:在开发过程中遇到一个问题,在连接redis的时候超时,spring.redis.timeout=1000设置了一秒超时,但是抛出redisconnectionfailureexception大约在10秒后,网上找了相关资料也没有找到什么原因,所以想着用代码去实现,这里用到了CompletableFuture。

Java8实现方式:

final String redisKey = key;
            //redis连接超时10秒后才会报错,这里指定下超时时间为1500毫秒
            String redisValue = CompletableFuture.supplyAsync(() -> {
                    return redisUtil.get(redisKey);
                }).get(1500, TimeUnit.MILLISECONDS);

Java9两种实现方式:

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(this::computeEndlessly)
  .orTimeout(1, TimeUnit.SECONDS);
//或者
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(this::computeEndlessly)
  .completeOnTimeout(42, 1, TimeUnit.SECONDS);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值