java 线程池

keepAliveTime:如果池中当前有多于 corePoolSize 的线程,则这些多出的线程在空闲时间超过 keepAliveTime 时将会终止。

红色字说明了下面两个方法返回值的区别。

getPoolSize():只要池中出现了大于等于corePoolSize 数量的线程,则该方法的返回值就不会小于corePoolSize 。

getActiveCount():该方法的返回值可以等于0。

在池中出现了大于等于corePoolSize 数量的线程后,线程池中至少会持有corePoolSize 数量的线程。

上面两个值在池中线程不断增多的时候是相等的,但是在线程不断减少的时候(空闲并超过keepAliveTime),前者最小能够降到corePoolSize ,而后者最小能够降到0

 

 

(转)isShutdown()isTerminated()是有区别的

我们可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池,它们的原理是遍历线程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程,所以无法响应中断的任务可能永远无法终止。但是它们存在一定的区别,shutdownNow首先将线程池的状态设置成STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表,而shutdown只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程。

只要调用了这两个关闭方法的其中一个,isShutdown方法就会返回true。当所有的任务都已关闭后,才表示线程池关闭成功,这时调用isTerminaed方法会返回true。至于我们应该调用哪一种方法来关闭线程池,应该由提交到线程池的任务特性决定,通常调用shutdown来关闭线程池,如果任务不一定要执行完,则可以调用shutdownNow。

 

参考

http://www.cnblogs.com/dolphin0520/p/3932921.html

 

posted on 2014-10-11 17:26  迷茫中寻找方向  阅读(203)  评论(0编辑  收藏  举报

导航