Java those things

JAVA 线程池 (二)使用线程池

2018-03-16  本文已影响3人  M_ENG

创建线程池:

关系(看源码):

            ThreadPoolExecutor  extends AbstractExecutorService

            AbstractExecutorService implements ExecutorService

            ExecutorService extends Executor

ExecutorService executors = new ThreadPoolExecutor(....)

executors.submit("Runable或者Callable"); //放入线程池 有返回结果

executors.execute("Runable");//放入线程池 有返回结果

上面两者具体解释和作用请看这里

executors.shutdown();//关闭线程池

允许之前已经提交但未执行或未完成的任务继续完成

executors.shutdownnow();//关闭线程池

阻止已经提交(但尚未运行的)的任务运行并且尝试停止正在运行的任务

CachedThreadPool

CachedThreadPool 是通过 java.util.concurrent.Executors 创建的 ThreadPoolExecutor 实例。这个实例会根据需要,在线程可用时,重用之前构造好的池中线程。这个线程池在执行 大量短生命周期的异步任务时(many short-lived asynchronous task),可以显著提高程序性能。调用 execute 时,可以重用之前已构造的可用线程,如果不存在可用线程,那么会重新创建一个新的线程并将其加入到线程池中。如果线程超过 60 秒还未被使用,就会被中止并从缓存中移除。因此,线程池在长时间空闲后不会消耗任何资源。

Integer.MAX_VALUE = 2147483647

FixedThreadPool

FixedThreadPool 是通过 java.util.concurrent.Executors 创建的 ThreadPoolExecutor 实例。这个实例会复用 固定数量的线程 处理一个 共享的无边界队列 。任何时间点,最多有 nThreads 个线程会处于活动状态执行任务。如果当所有线程都是活动时,有多的任务被提交过来,那么它会一致在队列中等待直到有线程可用。如果任何线程在执行过程中因为错误而中止,新的线程会替代它的位置来执行后续的任务。所有线程都会一致存于线程池中,直到显式的执行 ExecutorService.shutdown() 关闭。

这里的核心线程数设置规则:

Runtime.getRuntime().availableProcessors() = Ncpu(cpu核数)

IO密集型=2Ncpu     计算密集型=Ncpu+1     (百度 io密集型和计算密集型)


纯属个人理解   

不理解或者是有什么错误的地方、欢迎留言并会及时回复和改正的

上一篇下一篇

猜你喜欢

热点阅读