关于Executors类的使用!

Executors是java 中用来创建和管理线程池的类以下是它的常用方法:

1.newFixedThreadPool(int nThreads):创建一个固定大小的线程池;

2.newCachedThreadPool():创建一个可缓存的线程池,根据需要创建新线程;适用于需要处理大量短期任务的场景,并且任务之间的执行时间比较短。线程池会根据需要创建新线程,如果线程空闲时间超过指定时间(默认为60秒),则会被回收。

3.newSingleThreadExecutor():创建一个单线程的线程池,保证任务的执行顺;适用于需要保证任务按顺序执行的场景,例如需要按照提交顺序处理任务的日志处理。

4.newScheduledThreadPool(int corePoolSize):创建一个固定大小的线程池,支持定时及周期性的任务执行;适用于需要定时以及周期性执行任务的场景。例如,定时任务调度、定期数据备份等。

5.newWorkStealingPool():创建一个工作窃取线程池,每次任务都被分配给一个工作线程,如果该线程完成自己的任务,它会从其他线程窃取任务执行;适用于需要高效处理大量独立任务的场景,并且任务之间没有依赖关系。这种线程池通过工作窃取算法,可以充分利用系统资源,提高任务处理的并行性。

这些方法返回一个 ExecutorService 对象,它是一个线程池的高级接口,提供了更多的功能和控制。

以上主要重点说的就是newScheduledThreadPool,其中有

  1. scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit):延迟指定时间后开始执行任务,并以固定的频率重复执行。

  2. scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit):延迟指定时间后开始执行任务,并以固定的延迟时间重复执行。         

  3. 这两个的区别就在于scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始下次任务
    而scheduleWithFixedDelay 是不管任务执行多久,都会等上一次任务执行完毕后再延迟delay后去执行下次任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值