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