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());    }

  • 相关阅读:
    c# 02-18 值类型 引用类型 字符串的不可变性 字符串的处理方法
    c#0218-命名空间
    c#学习0217
    BootStrap学习
    c#学习0216
    AngularJS学习
    java面试题之什么是死锁、活锁、饿死和竞态条件?
    java面试题之能创建volatile数组吗?
    java面试题之sleep()和wait()方法的区别
    java面试题之Thread的run()和start()方法有什么区别
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/9606546.html
Copyright © 2011-2022 走看看