Java timertask完成后在主线程中调用方法
我已通过Java timertask完成后在主线程中调用方法,java,multithreading,timertask,Java,Multithreading,Timertask,我已通过initializeTimerTask()设置了一个TimerTask,该任务在指定的时间间隔后运行。 任务完成后,我想在主线程中调用一个方法。我怎样才能做到这一点?我想让我的主线程wait()无法工作,因为该任务正在重复,而初始化方法只调用了一次 这是我的密码: public void initializeTimerTask(){ 定时器t=新定时器(); TrackingTask tracker=新TrackingTask(); t、 scheduleAtFixedRate(跟踪器,
initializeTimerTask()
设置了一个TimerTask
,该任务在指定的时间间隔后运行。任务完成后,我想在主线程中调用一个方法。我怎样才能做到这一点?我想让我的主线程
wait()
无法工作,因为该任务正在重复,而初始化方法只调用了一次
这是我的密码:
public void initializeTimerTask(){
定时器t=新定时器();
TrackingTask tracker=新TrackingTask();
t、 scheduleAtFixedRate(跟踪器,0,间隔);
}
类TrackingTask扩展了TimerTask{
@凌驾
公开募捐{
试一试{
doMyTracking();
//TODO:通知主线程执行一些工作
}
}
}
使用
在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.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();
}
}
不幸的是,这导致我的主线程除了等待队列之外什么也不做。。。但它应该能够同时执行其他操作,例如,当跟踪间隔设置为10分钟时。在执行TrackingTask后,是否需要在主线程中精确执行“stuff”?然后您可以启动一个新的可运行而非队列。您是否在TrackingTask完成后更新某种GUI,因此您必须在主(UI)线程上执行它?不,我没有GUI。我只是觉得如果我回到主线程会更干净。。。但我想它也会与一个新的Runnable一起工作。谢谢不幸的是,这导致我的主线程除了等待队列之外什么也不做。。。但它应该能够同时执行其他操作,例如,当跟踪间隔设置为10分钟时。在执行TrackingTask后,是否需要在主线程中精确执行“stuff”?然后您可以启动一个新的可运行而非队列。您是否在TrackingTask完成后更新某种GUI,因此您必须在主(UI)线程上执行它?不,我没有GUI。我只是觉得如果我回到主线程会更干净。。。但我想它也会与一个新的Runnable一起工作。谢谢