ThreadPoolExecutor线程池任务执行失败的时候会怎样
接上一篇 《JDK1.8中的线程池》 1.? 任务执行失败时的处理逻辑 1.1.? Worker Worker相当于线程池中的线程 可以看到,Worker有几个重要的属性:
同时,还应该注意到,在构造方法中给thread赋值为一个新线程。由于Worker实现了Runnable接口,也就是说它本身就是可执行的任务,当它启动的时候理所当然应该运行run()方法,而它的run()方法中调用了runWorker(this)方法 1.2.? Worker是如何创建的 主要是:创建Workder对象,并将该对象加入到Worker集合中,最后启动Worker(PS:启动Worker中的线程是启动Worker) 1.3.? runWorker(this) 可以看到,创建线程的时候传的是this,this代表的是Worker对象,而Worker是一个Runnable,因此当调用线程的start()方法后执行的是Worker的run()方法,而Worker的run()方法里面调用的时候runWorker(this),因此,接下来重点看一下runWorker(this) 如果task.run()方法抛异常,则会被catch捕捉到,但是catch又将异常抛出去了,外层的两个try没有捕获,跳出循环,执行3个finally 我们只看最后一个finally 看到这里,一切真相大白 当任务执行失败后,该Workder会被从Worker集合中删除,然后,只要线程池当前还在继续处理任务,则重新创建一个新的Worker 也就是说,任务执行失败后,原来的Worker就死了,如果线程池还在继续处理任务,则再创建一个新的Worker 2.? 拒绝策略 ?? 四种策略:
3.? 其它相关 《JDK1.8中的线程池》 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |