我想暂停“计时器”线程....或者我可以说想要将其置于“等待”模式,然后在某些事情完成后通知。
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对象的通知操作....我已经尝试过这种方法..........但是无法得到解决方案......
我会感激任何建议......
问候。
答案 0 :(得分:0)
由于我不知所措,你有一个听一些偶数的线程并执行这个事件。梅比生产者 - 消费者模式将有所帮助:
1您有生产者将消息放入队列
2您有存储消息的BlockingQueue
3你有线程从BlockingQueue读取消息(如果队列是空线程等待消息)并且取决于它显示/隐藏你的对话的消息。
认为这将是最简单明了的实施。
答案 1 :(得分:0)
使用另一个Thread.Dend监视你的TimerTask,当它满足时只需通知你的Timetask来停止Job就指定你的条件某种while循环。
答案 2 :(得分:0)
感谢BOSS和Alexey的贡献,我已经解决了我的问题,一个连续运行的线程有睡眠1秒。
我的解决方案是 - solution 或者在:main thread 如果你发现我的解决方案有帮助,请投票,因为我需要一些声誉,以便在黑莓房间开始聊天。
thnks。