2017-08-22 18 views
0

我有一个扩展线程的类,如下所示,我希望它有一个volitile布尔字段,它检查以决定是否继续运行。 shouldRun()方法从我的GUI的EDT中调用。如何使用volatile boolean来检查线程是否应该运行? (Java)

如何获得此线程来检查布尔值以知道它是否应该从我的GUI的Event Dispatcher线程运行或等待()?

public class RobotThread extends Thread{ 

    public volatile boolean run; 
    //if running == true, let thread run 
    //if running == false, invoke wait() somehow; 

    public RobotThread(AutoClicker autoClicker) { 
     super(autoClicker); 
     run = true; 
    } 

    public void setRun(boolean shouldRun) { 
     this.run = shouldRun; 
    } 

    public boolean getRun() { 
     return run; 
    } 
} 

一般情况下,我只是希望能够得到这个线程等待(),并从我的GUI与按钮的事件调度线程重新启动。如果有更好的方法可以做到这一点,我也很乐意听到它。提前致谢!

+0

你打算从EDT重新启动它?它是用户操作还是什么?什么是EDT?为什么你的线程正在等待执行?处理线程同步的常用方法是使用同步对象。你可以检查开始这个http://tutorials.jenkov.com/java-concurrency/synchronized.html –

回答

1

为等待并重新启动,我相信一个无穷远环,waitnotify方法是你在找什么。例如,看看this guide

+0

明白了,谢谢你指向我的资源! 原来我在我的代码中混合了while循环和synchronized语句的顺序,这就是为什么wait()和notify()保持混乱并给我非法的ExceptionException异常。猜猜问题与我的同步性不是一回事。 我想我应该删除这个问题呢? – Jeff

+0

好。乐于帮助。虽然,我们都犯了错误,所以也许别人会需要这个职位。 – hadilq

相关问题