美文网首页Java those things
JAVA 线程池 (二)使用线程池

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

作者: M_ENG | 来源:发表于2018-03-16 11:14 被阅读3次

    创建线程池:

    关系(看源码):

                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密集型和计算密集型)


    纯属个人理解   

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

    相关文章

      网友评论

        本文标题:JAVA 线程池 (二)使用线程池

        本文链接:https://www.haomeiwen.com/subject/ufjlqftx.html