深入浅出 Java Concurrency (30)- 线程池 part 3 Executor 生命周期()

  本篇文章为你整理了深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期()的详细内容,包含有 深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期,希望能帮助你了解 深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期。

   @mashiguang
我猜测应该是ArrayBlockingQueue用一把锁而LinkedBlockingQueue用两把锁的原因

  
@imxylz
谢谢指点,你这种方式更优雅些,我自己是new了个exceptionQueue,new线程的时候set进去,然后执行完子线程后查看这个Queue

  
nginx支持302这种非200状态码,但是当有302经过nginx,它缓存的是什么?是源文件还是链接?我从浏览器输入的时候还是会收到302啊。

  
@liubey
友好的做法是子线程不抛出异常,返回不同的结果,或者将异常封装到return对象中。父对象根据此结果/异常封装友好的提示给界面。

  
这东西做得不错,确实是用来找自定义的jar(第三方公司,不是开源项目)包中class的利器。感谢楼主

  
 

  我们知道线程是有多种执行状态的,同样管理线程的线程池也有多种状态。JVM会在所有线程(非后台daemon线程)全部终止后才退出,为了节省资源和有效释放资源关闭一个线程池就显得很重要。有时候无法正确的关闭线程池,将会阻止JVM的结束。

  线程池Executor是异步的执行任务,因此任何时刻不能够直接获取提交的任务的状态。这些任务有可能已经完成,也有可能正在执行或者还在排队等待执行。因此关闭线程池可能出现一下几种情况:

   平缓关闭:已经启动的任务全部执行完毕,同时不再接受新的任务 立即关闭:取消所有正在执行和未执行的任务 另外关闭线程池后对于任务的状态应该有相应的反馈信息。

  图1 描述了线程池的4种状态。

   线程池在构造前(new操作)是初始状态,一旦构造完成线程池就进入了执行状态RUNNING。严格意义上讲线程池构造完成后并没有线程被立即启动,只有进行“预启动”或者接收到任务的时候才会启动线程。这个会后面线程池的原理会详细分析。但是线程池是出于运行状态,随时准备接受任务来执行。 线程池运行中可以通过shutdown()和shutdownNow()来改变运行状态。shutdown()是一个平缓的关闭过程,线程池停止接受新的任务,同时等待已经提交的任务执行完毕,包括那些进入队列还没有开始的任务,这时候线程池处于SHUTDOWN状态;shutdownNow()是一个立即关闭过程,线程池停止接受新的任务,同时线程池取消所有执行的任务和已经进入队列但是还没有执行的任务,这时候线程池处于STOP状态。 一旦shutdown()或者shutdownNow()执行完毕,线程池就进入TERMINATED状态,此时线程池就结束了。 isTerminating()描述的是SHUTDOWN和STOP两种状态。 isShutdown()描述的是非RUNNING状态,也就是SHUTDOWN/STOP/TERMINATED三种状态。

  图1

  线程池的API如下:

  图2

  其中shutdownNow()会返回那些已经进入了队列但是还没有执行的任务列表。awaitTermination描述的是等待线程池关闭的时间,如果等待时间线程池还没有关闭将会抛出一个超时异常。

  对于关闭线程池期间发生的任务提交情况就会触发一个拒绝执行的操作。这是java.util.concurrent.RejectedExecutionHandler描述的任务操作。下一个小结中将描述这些任务被拒绝后的操作。

  

  总结下这个小节:

   线程池有运行、关闭、停止、结束四种状态,结束后就会释放所有资源 平缓关闭线程池使用shutdown() 立即关闭线程池使用shutdownNow(),同时得到未执行的任务列表 检测线程池是否正处于关闭中,使用isShutdown() 检测线程池是否已经关闭使用isTerminated() 定时或者永久等待线程池关闭结束使用awaitTermination()操作

   线程池 part2 Executor 以及Executors 目 录 线程池 part4 线程池任务拒绝策略
2009-2014 IMXYLZ

  imxylz.com

  求贤若渴

  以上就是深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期()的详细内容,想要了解更多 深入浅出 Java Concurrency (30): 线程池 part 3 Executor 生命周期的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: