JAVA 线程池 (二)使用线程池
创建线程池:
关系(看源码):
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密集型和计算密集型)
纯属个人理解
不理解或者是有什么错误的地方、欢迎留言并会及时回复和改正的