ScheduledExecutorService中scheduleAtFixedRate方法的同步
来源:互联网 发布:数据采集与图片处理 编辑:程序博客网 时间:2024/05/05 19:59
因为scheduleAtFixedRate是指定频率执行方法,若方法的执行时间大于指定的间隔时间,将会发生,同一时间点 ,执行方法N 次。
所以需要使用同步方法才确保并发操作的安全性。
import Java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
- public class TodoTimer {
- static Logger log = SimpleLogger.getLogger(TodoTimer.class);
- private TodoTimer() {
- }
- /**
- * 定时操作线程
- */
- private final static Runnable TodoOperation = new Runnable() {
- public void run() {
- try {
- semaphore.acquire();
- TodoManager.operate();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- semaphore.release();
- }
- }
- };
- /**
- * 同步信号量
- */
- private static final Semaphore semaphore = new Semaphore(1);
- /**
- * 定时执行
- */
- private static ScheduledExecutorService scheduler = null;
- /**
- * 启动定时器
- */
- public static void start() {
- if (scheduler == null) {
- scheduler = Executors.newScheduledThreadPool(1);
- synchronized (scheduler) {
- /*
- * TODO 设置定时器启动时间和间隔
- */
- scheduler.scheduleAtFixedRate(TodoOperation, 20, 60*5, TimeUnit.SECONDS);
- log.debug("启动TODO定时器!");
- }
- } else {
- log.warn("TODO定时器正在运行!");
- }
- }
- /**
- * 停止定时器
- */
- public static void stop() {
- synchronized (scheduler) {
- if (scheduler != null && !scheduler.isShutdown()) {
- scheduler.shutdown();
- scheduler = null;
- log.debug("关闭TODO定时器!");
- }
- }
- }
- /**
- * 重启定时器
- */
- public static void restart() {
- stop();
- start();
- }
- /**
- * 手动触发
- */
- public static void trigger() {
- TodoOperation.run();
- }
- }
0 0
- ScheduledExecutorService中scheduleAtFixedRate方法的同步
- ScheduledExecutorService中scheduleAtFixedRate方法的同步
- ScheduledExecutorService中scheduleAtFixedRate方法的同步
- ScheduledExecutorService中scheduleAtFixedRate方法同步
- ScheduledExecutorService 的 scheduleAtFixedRate 和 scheduleWithFixedDelay 两个方法的区别
- ScheduledExecutorService的scheduleAtFixedRate和scheduleWithFixedDelay方法的区别
- JAVA定时器ScheduledExecutorService中,scheduleAtFixedRate和scheduleWithFixedDelay的区别
- ScheduledExecutorService 中两个方法
- Timer类中schedule和scheduleAtFixedRate方法的区别
- Timer的schedule 、scheduleAtFixedRate方法
- ScheduledExecutorService定时周期执行指定的任务 ,关于scheduleAtFixedRate 和 scheduleWithFixedDelay使用区别
- ScheduledThreadPoolExecutor 中ScheduleAtFixedRate 和 ScheduleWithFixedDelay方法讲解
- 如何从Runnable内部跳出ScheduledExecutorService.scheduleAtFixedRate
- ScheduledExecutorService 定时任务,scheduleAtFixedRate和scheduleWithFixedDelay区别
- schedule方法和scheduleAtFixedRate方法的区别
- ScheduledExecutorService的两种方法
- Timer的schedule和scheduleAtFixedRate方法辨析
- 线程中的ScheduledThreadPoolExecutor的scheduleAtFixedRate方法详解
- 下载文件做模板
- VirtualBox 磁盘扩容
- 开发者详解:端游及手游服务端的常用架构
- <ROS> Gazebo Ros Control 及 Controller运用
- 实现外卖选餐时两级 tableView 联动效果
- ScheduledExecutorService中scheduleAtFixedRate方法的同步
- andriod第三课----java高级语法2
- B-树、后缀数组、网络流算法、问题规约、不可解性
- VC编译出现如下错误:错误1error C2664: “wsprintfW”: 不能将参数 2 从“const char [6]”转换为“LPCWSTR”e:\c_2008\pra6\pra6\
- C++写文件的text模式和binary模式
- tbody标签的作用介绍
- 入冬最冷的上海——致在外漂泊的孩子
- Java操作Mongodb之文件读写
- AutoCompleteTextView 自动提示