我已经通过TimerTask
设置了initializeTimerTask()
,它在指定的时间间隔后运行。
任务完成后,我想在主线程中调用一个方法。我该如何实现?我想让主线程wait()
无法正常工作是因为该任务正在重复发生,并且初始化方法只调用了一次?
这是我的代码:
public void initializeTimerTask() {
Timer t = new Timer();
TrackingTask tracker = new TrackingTask();
t.scheduleAtFixedRate(tracker, 0, interval);
}
class TrackingTask extends TimerTask {
@Override
public void run() {
try {
doMyTracking();
// TODO: Notify main thread to do some work
}
}
}
答案 0 :(得分:0)
在TrackingTask.run()
方法的末尾,将包含“必须在主线程中完成的某些工作”的Runnable添加到队列中。
在您的main方法中,一种可能性是进行无限循环并调用队列的take()
方法并运行该队列以接任务(或等到有一个任务)并运行它。
在main方法中,例如:
public static final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
public static void main(String[] args) throws InterruptedException {
yourClassInstance.initializeTimerTask();
while(true) {
queue.take().run();
}
}
在您的TrackingTask
类中:
class TrackingTask extends TimerTask {
@Override
public void run() {
doMyTracking();
queue.add(() -> {
// Here the stuff that needs to be done in the main thread.
// The Runnable is added to the queue and then taken and executed in main()
});
}
}