在工作中经常需要调用别人的方法或者第三方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:最后一定要关闭线程池