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