java声明不同线程池

  • 声明一个静态线程池
public static final ExecutorService POOL;

    private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("COMMON-POOL-%d").build();

    static {
        POOL = new ThreadPoolExecutor(20, 40, 300,
                TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(20),
                namedThreadFactory,
                new ThreadPoolExecutor.AbortPolicy());
    }

调度任务的线程池
● ScheduledExecutorService
● fixedRate:固定频率执行,等考虑任务执行时间是否超过频率时长,如果超过则任务结束后立刻执行,没有超过则按照设置的频率时间来执行

  pool.scheduleAtFixedRate(() -> {
            System.out.println(Thread.currentThread() + "_" + simpleDateFormat.format(new Date()));
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //启动程序延时两秒,间隔3s执行
        }, 2, 3, TimeUnit.SECONDS);
//启动延时2秒开始执行
//固定三秒后再吃执行,判断任务有没有有3s内执行结束,执行结束就执行,没有结束就等任务结束后立即执行,
比如任务执行2s,rate=3s,那就是3s执行一次,如果任务5s查过rate,那就是等任务结束后5s执行一次

fixedDelay:固定延时,指的是任务执行完后延时时间,任务执行1s,延时2s那就是3s执行一次

  pool.scheduleWithFixedDelay(() -> {
            System.out.println(Thread.currentThread() + "_" + simpleDateFormat.format(new Date()));
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, 5, 3, TimeUnit.SECONDS);

//启动延时五秒开始执行
//等任务执行完后再延时三秒执行一次 所以执行间隔是5s

 

posted @ 2024-03-27 12:08  洞玄巅峰  阅读(12)  评论(0编辑  收藏  举报