zoukankan      html  css  js  c++  java
  • 线程池(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
  • 相关阅读:
    Postman测试写法的问题
    Spring Cloud
    Swagger2构造RESTful API开发Java Web
    web前端三大框架(主流Vue.js)
    zookeeper
    分布式服务介绍
    2019年java技术大盘点
    refusing to merge unrelated histories
    PPT制作不加班的十个小窍门
    如何快速完成一份学术型PPT
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/9606476.html
Copyright © 2011-2022 走看看