关于scheduleAtFixedRate

来源:8-3 线程池-3

破裂人偶

2018-07-20

executorService.scheduleAtFixedRate(()->{
   log.warn("fixed rate run");
   count++;
   log.info("count:{}",count);
   if (count > 9){
       executorService.shutdown();
   }
},1,3,TimeUnit.SECONDS);

请问下在scheduleAtFixedRate中加入计数器,来达到10次以后结束进程。这样是否是线程安全的

写回答

2回答

Jimin

2018-07-20

你好,这个线程池我们通常定义ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); 然后在实际调度时是使用一个线程去执行的,因为即使里面操作不是线程安全的,比如count直接做++操作,但实际运行时同一时间只会使用一个线程去调度,相当于单线程在执行,因此并不需要担心线程安全的问题。
同时,这种定时轮训执行的处理通常不会去关闭线程池,这个调度里添加shundown看起来怪怪的,测试时可以这样玩,实际中建议别这样写。这种定时轮训调度的操作如果还需要关闭线程池的话,基本上肯定可以找到更合适的替代写法。

0
1
破裂人偶
谢谢老师解答
2018-07-20
共1条回复

破裂人偶

提问者

2018-07-20

谢谢老师解答

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程