ThreadPoolExecutor+Future 实现多线程等待功能

背景

ThreadPoolExcutor 是线程池的一种实现类,我们可以通过它创建一个线程池。

然后通过线程池提交多个FutureTask 进行任务的提交

最后通过 循环的方式 调用 Future.get() 实现线程的阻塞,等待FutureTask 全部执行完成

源码分析

针对上面的操作,在源码的层面是如何实现的呢?为什么future.get() 会阻塞线程呢?我们从jdk源码的角度去分析下

首先是任务的提交,使用的是submit

将我们的回调函数封装成 FutureTask,然后通过execute 去执行 task

封装成work ,然后调用run() 来执行

run 方法最后有解除阻塞的线程的方法

在finishCompletion() 中进行线程阻塞解除



Future.get方法,如果没执行完成则进行阻塞等待

最后再 finishCompletion() 中解除阻塞

总结

ThreadPoolExecutor+Future 的方式实现多线程的等待,最终使用的是LockSupport.park() 的方式阻塞未执行完的线程,Future 是一个顶级的父类接口,其实现类的实现方式都是大同小异的,希望这边文章能给你带来收获。

展开阅读全文

页面更新:2024-04-22

标签:下首   大同小异   线程   层面   函数   源码   接口   角度   方式   功能   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top