这么说吧,java线程池的实现原理其实很简单 (4)

这么说吧,java线程池的实现原理其实很简单

FutureTask.run方法是在线程池中被执行的,而非主线程

1、通过执行Callable任务的call方法;

2、如果call执行成功,则通过set方法保存结果;

3、如果call执行有异常,则通过setException保存异常;

set

这么说吧,java线程池的实现原理其实很简单

setException

这么说吧,java线程池的实现原理其实很简单

set和setException方法中,都会通过UnSAFE修改FutureTask的状态,并执行finishCompletion方法通知主线程任务已经执行完成;

finishCompletion

这么说吧,java线程池的实现原理其实很简单

1、执行FutureTask类的get方法时,会把主线程封装成WaitNode节点并保存在waiters链表中;

2、FutureTask任务执行完成后,通过UNSAFE设置waiters的值,并通过LockSupport类unpark方法唤醒主线程;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdjsy.html