线程池中的一个线程抛出异常会怎么处理?

2023-08-27  本文已影响0人  CoderInsight

详细参考连接-以及最后有源码流程的分析
答:

  1. 首先该异常会被抛出,且根据线程提交方式的不同:
    • execute(new task()) 会直接抛出异常;
    • submit(new task()) 则不会直接将异常抛出,而需要通过 future.get() 获取线程池的结果或者异常信息;
    • 底层都是调用的 excute() 方法,无非是 submit() 方法使用了 try ... catch ... 进行了二次捕获处理,封装返回给 Future 对象。
  2. 单个线程的异常并不会影响线程池中的其他任务执行;
  3. 最后会将这个线程从线程池中移除,并创建一个新的线程放到线程池中。
上一篇 下一篇

猜你喜欢

热点阅读