• 线程池(2)Executors.newFixedThreadPool


    例子:

    ExecutorService es = Executors.newFixedThreadPool(5);
            try {
                for (int i = 0; i < 20; i++) {
                    Runnable syncRunnable = new Runnable() {
                        @Override
                        public void run() {
                            log.info(Thread.currentThread().getName());
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    es.execute(syncRunnable);
                }
            } finally {
                es.shutdown();
            }
    运行结果:
             *  10:20:14.630 pool-1-thread-5
                10:20:14.630 pool-1-thread-1
                10:20:14.632 pool-1-thread-4
                10:20:14.630 pool-1-thread-2
                10:20:14.630 pool-1-thread-3
                10:20:16.635 pool-1-thread-4
                10:20:16.635 pool-1-thread-5
                10:20:16.635 pool-1-thread-1
                10:20:16.636 pool-1-thread-2
                10:20:16.637 pool-1-thread-3
                10:20:18.637 pool-1-thread-3
                10:20:18.638 pool-1-thread-4
                10:20:18.641 pool-1-thread-5
                10:20:18.641 pool-1-thread-1
                10:20:18.642 pool-1-thread-2
                10:20:20.638 pool-1-thread-3
                10:20:20.639 pool-1-thread-4
                10:20:20.641 pool-1-thread-5
                10:20:20.642 pool-1-thread-1
                10:20:20.642 pool-1-thread-2

    调用的ThreadPoolExecutor:

    public static ExecutorService newFixedThreadPool(int nThreads) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                          0L, TimeUnit.MILLISECONDS,
                                          new LinkedBlockingQueue<Runnable>());
        }

    corePoolSize=maximumPoolSize=5

    keepAliveTime=0

    allowCoreThreadTimeout=false(默认)

    因此,

    • 线程池中的线程数永远是5,永久存活。
    • 对于新任务,当队列未满时,插入队列;当队列已满时,默认执行AbortPolicy,即抛出异常。
    • 支持线程reuse
  • 相关阅读:
    生成二维码
    IIS与Apache同时使用80端口
    C# 时间类型
    EXT 省市三级联动及默认选择
    拼音首字母查询汉字内容
    web.config
    使用input=file上传
    Js 扩展
    Linux 调试错误
    图的最短路径Dijkstra
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/9606476.html
Copyright © 2020-2023  润新知