|
@@ -34,6 +34,8 @@ class TimerService {
|
|
|
import java.util.List;
|
|
|
import java.util.Timer;
|
|
|
import java.util.TimerTask;
|
|
|
+ import java.util.concurrent.locks.Lock;
|
|
|
+ import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
/**
|
|
|
* Default timer service implementation.
|
|
@@ -45,6 +47,8 @@ class TimerService {
|
|
|
|
|
|
private final List<TimeEventTask> timerTaskList = new ArrayList<TimeEventTask>();
|
|
|
|
|
|
+ private final Lock lock = new ReentrantLock();
|
|
|
+
|
|
|
/**
|
|
|
* Timer task that reflects a time event. It's internally used by
|
|
|
* {@link TimerService}.
|
|
@@ -90,6 +94,7 @@ class TimerService {
|
|
|
|
|
|
// Create a new TimerTask for given event and store it.
|
|
|
TimeEventTask timerTask = new TimeEventTask(callback, eventID);
|
|
|
+ lock.lock();
|
|
|
timerTaskList.add(timerTask);
|
|
|
|
|
|
// start scheduling the timer
|
|
@@ -98,15 +103,18 @@ class TimerService {
|
|
|
} else {
|
|
|
timer.schedule(timerTask, time);
|
|
|
}
|
|
|
+ lock.unlock();
|
|
|
}
|
|
|
|
|
|
public void unsetTimer(ITimerCallback callback, int eventID) {
|
|
|
+ lock.lock();
|
|
|
int index = timerTaskList.indexOf(new TimeEventTask(callback, eventID));
|
|
|
if (index != -1) {
|
|
|
timerTaskList.get(index).cancel();
|
|
|
timer.purge();
|
|
|
timerTaskList.remove(index);
|
|
|
}
|
|
|
+ lock.unlock();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -114,8 +122,10 @@ class TimerService {
|
|
|
* memory resources.
|
|
|
*/
|
|
|
public void cancel() {
|
|
|
+ lock.lock();
|
|
|
timer.cancel();
|
|
|
timer.purge();
|
|
|
+ lock.unlock();
|
|
|
}
|
|
|
}
|
|
|
|