java调用耗时方法解决

在工作中经常需要调用别人的方法或者第三方sdk提供的方法,但是有些时候由于网络或者对方服务器性能等问题导致线程卡死或等待时间太长问题导致当前方法一直没有响应,当客户端频繁刷新调用这个接口的时候可能会导致整个服务挂掉

处理方法

使用ExecutorService,ExecutorService是Java中强大的线程管理工具,提供了很多对线程的操作,我们通过对创建一个线程池,再把需要执行的方法最为task放进去执行,设置超时时间,等待执行结果

程序运行事例

1.超时

2.正常

以下是事例代码

import java.util.concurrent.*;

/**
 * @author: zrl
 * @create-date: 2024/5/14 16:44
 */
public class Test {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(() -> task());
        String result;
        try {
            //超时时间设置为2秒
            result = future.get(2, TimeUnit.SECONDS);
        } catch (Exception e) {
            result = "task超时";
        }finally {
            // 关闭线程池
            executor.shutdownNow();
        }
        System.out.println(result);
    }

    public static String task() throws InterruptedException {
        Thread.sleep(1000);
        return "success";
    }
}

tips:最后一定要关闭线程池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值