zoukankan      html  css  js  c++  java
  • 线程池(4)Executors.newScheduledThreadPool-只执行1次

    例子1:延迟3秒后,只执行1次

    ScheduledExecutorService es = Executors.newScheduledThreadPool(5);
            log.info("开始时间");
            try {
                for (int i = 0; i < 20; i++) {
                    Runnable syncRunnable = new Runnable() {
                        @Override
                        public void run() {
                            log.info(Thread.currentThread().getName());
                        }
                    };
                    es.schedule(syncRunnable, 3000, TimeUnit.MILLISECONDS);
                }
            } finally {
                es.shutdown();
            }

    运行结果:

                10:41:39.589 开始时间
                10:41:42.595 pool-1-thread-1
                10:41:42.595 pool-1-thread-2
                10:41:42.595 pool-1-thread-3
                10:41:42.595 pool-1-thread-4
                10:41:42.596 pool-1-thread-2
                10:41:42.596 pool-1-thread-5
                10:41:42.596 pool-1-thread-1
                10:41:42.596 pool-1-thread-3
                10:41:42.597 pool-1-thread-4
                10:41:42.597 pool-1-thread-2
                10:41:42.597 pool-1-thread-5
                10:41:42.597 pool-1-thread-1
                10:41:42.598 pool-1-thread-3
                10:41:42.598 pool-1-thread-4
                10:41:42.598 pool-1-thread-2
                10:41:42.599 pool-1-thread-5
                10:41:42.599 pool-1-thread-1
                10:41:42.600 pool-1-thread-3
                10:41:42.600 pool-1-thread-4
                10:41:42.600 pool-1-thread-2

    调用的ThreadPoolExecutor:

    public ScheduledThreadPoolExecutor(int corePoolSize) {
            super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
                  new DelayedWorkQueue());
        }

    corePoolSize=5,maximumPoolSize=Integer.MAX_VALUE

    keepAliveTime=0纳秒

    allowCoreThreadTimeout=false(默认)

    采用延迟队列DelayedWorkQueue

    因此,

    • 线程池中的线程数永远是5,永久存活
    • 对于新任务,当队列未满时,插入队列;当队列已满时,默认执行AbortPolicy,即抛出异常。
    • 支持线程reuse

    因此,类似newFixedThreadPool

     

    public ScheduledThreadPoolExecutor(int corePoolSize) {        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,              new DelayedWorkQueue());    }

  • 相关阅读:
    批处理(bat)的一些记录
    在 Docker 中已运行的 container 如何修改 run 时的 env
    Linux 的一些命令记录
    Javascript aop(面向切面编程)之around(环绕)
    dojo Provider(script、xhr、iframe)源码解析
    dojo/request模块整体架构解析
    require、module、exports dojo中的三个特殊模块标识
    CSS垂直居中总结
    Javascript图片裁切
    CSS Font知识整理总结
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/9606546.html
Copyright © 2011-2022 走看看