如何暂停计时器线程

时间:2012-06-01 11:53:11

标签: java timer timertask

我想暂停“计时器”线程....或者我可以说想要将其置于“等待”模式,然后在某些事情完成后通知。

Timer _catchTimer = new Timer(); CatchAppNameTimer _catchTimerTask = new CatchAppNameTimer(_catchTimer); _catchTimer.schedule(_catchTimerTask, 0, 5000);

我的“TimerTask(_catchTimerTask)”每次显示一个弹出屏幕....弹出屏幕有两个按钮 - 解锁,取消。

基本上我想要那个直到用户点击....其中一个解锁/取消btn,时间线程设置在等待模式.....当用户点击其中一个解锁/取消按钮..... .......只有在那之后,时间线程才会得到通知。

目前我在“timertask”的run方法中使用了一个布尔变量.....来处理死锁情况......就是每隔几秒就会调用一次TimerTask ......即使是弹出屏幕已经显示..........

如下:

public void run() { 


GlobalSingleton obj = null; 
  obj = GlobalSingleton.getInstance(); 
  if( obj.getShowDialog() ) 
        return;

   unlockField();
}

当第一次“unlockFiled()”调用........我将布尔变量设置为true(使用运行时存储).......由getShowDialog()方法返回哪个值。并在

解锁/取消按钮的

fieldChanged(Field field, int context) { }方法.........我通过调用...将布尔var的值设置为false ......

GlobalSingleton obj = null; obj = GlobalSingleton.getInstance(); obj.setShowDialog(false);

但正确的approch是“计时器 - 任务”不应该再次启动....... untilll用户按下取消阻止/取消按钮,控件退出fieldChanged(Field field, int context) { }方法。

shuld我使用不同的线程来处理.... wait - 基于布尔变量对Timer对象的通知操作....我已经尝试过这种方法..........但是无法得到解决方案......

我会感激任何建议......

问候。

3 个答案:

答案 0 :(得分:0)

由于我不知所措,你有一个听一些偶数的线程并执行这个事件。梅比生产者 - 消费者模式将有所帮助:

1您有生产者将消息放入队列

2您有存储消息的BlockingQueue

3你有线程从BlockingQueue读取消息(如果队列是空线程等待消息)并且取决于它显示/隐藏你的对话的消息。

认为这将是最简单明了的实施。

答案 1 :(得分:0)

使用另一个Thread.Dend监视你的TimerTask,当它满足时只需通知你的Timetask来停止Job就指定你的条件某种while循环。

答案 2 :(得分:0)

感谢BOSS和Alexey的贡献,我已经解决了我的问题,一个连续运行的线程有睡眠1秒。

我的解决方案是 - solution 或者在:main thread 如果你发现我的解决方案有帮助,请投票,因为我需要一些声誉,以便在黑莓房间开始聊天。

thnks。

相关问题