📄 actualtimerthread.java
字号:
/* * @(#)$Id: ActualTimerThread.java,v 1.3 2004/07/02 23:59:22 huebsch Exp $ * * Copyright (c) 2001-2004 Regents of the University of California. * All rights reserved. * * This file is distributed under the terms in the attached BERKELEY-LICENSE * file. If you do not find these files, copies can be found by writing to: * Computer Science Division, Database Group, Universite of California, * 617 Soda Hall #1776, Berkeley, CA 94720-1776. Attention: Berkeley License * * Copyright (c) 2003-2004 Intel Corporation. All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE file. * If you do not find these files, copies can be found by writing to: * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, * Berkeley, CA, 94704. Attention: Intel License Inquiry. */package runtime.services.timer;import java.util.TreeMap;/** * Class ActualTimerThread * */public class ActualTimerThread extends Thread implements Runnable { private TreeMap events; private ActualTimer eventProcessor; private long defaultSleepTime; private boolean run; /** * Constructor ActualTimerThread * * @param events * @param eventProcessor * @param defaultSleepTime */ public ActualTimerThread(TreeMap events, ActualTimer eventProcessor, long defaultSleepTime) { this.events = events; this.eventProcessor = eventProcessor; this.defaultSleepTime = defaultSleepTime; this.run = true; } private ActualTimerEvent getFirstEvent() { synchronized (events) { if (events.size() > 0) { return (ActualTimerEvent) events.firstKey(); } else { return null; } } } private void removeEvent(ActualTimerEvent event) { synchronized (events) { events.remove(event); } } private void processQueue() { ActualTimerEvent firstEvent = getFirstEvent(); while (firstEvent != null) { double currentTime = eventProcessor.getCurrentTime(); double eventTime = firstEvent.getExecutionTime(); if (eventTime <= currentTime) { removeEvent(firstEvent); eventProcessor.runEvent(firstEvent); } else { break; } // Get the next event firstEvent = getFirstEvent(); } } private long determineSleepTime() { ActualTimerEvent firstEvent = getFirstEvent(); if (firstEvent != null) { double currentTime = eventProcessor.getCurrentTime(); double eventTime = firstEvent.getExecutionTime(); double delay = eventTime - currentTime; if (delay < 0) { delay = 0; } return (long) ((delay) * 1000); } else { return defaultSleepTime; } } /** * Method run */ public void run() { while (run) { processQueue(); try { Thread.sleep(determineSleepTime()); } catch (InterruptedException e) {} } } /** * Method end */ public void end() { run = false; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -