请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于scheduleAtFixedRate

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 20:25:35

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

0 回复 有任何疑惑可以回复我~
  • 提问者 破裂人偶 #1
    谢谢老师解答
    回复 有任何疑惑可以回复我~ 2018-07-20 20:31:26
提问者 破裂人偶 2018-07-20 20:31:12

谢谢老师解答

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号