如何让1个UI线程等待另一个UI线程

时间:2010-06-11 01:14:59

标签: java user-interface multithreading

我有两个UI线程。 我想确保第一个完成运行,然后运行另一个。 我怎么能这样做? 非常感谢!

UIJob uiJob = new UIJob("settext1") {
    public IStatus runInUIThread(IProgressMonitor ipm) {
        webBrowser.setText(finalContent);
        return Status.OK_STATUS;
    }
};
uiJob.schedule();

UIJob uiJob2 = new UIJob("settext2") {
    public IStatus runInUIThread(IProgressMonitor ipm) {
        webBrowser.execute(executeMoreFunction);
        return Status.OK_STATUS;
    }
};
uiJob2.schedule();

2 个答案:

答案 0 :(得分:1)

来自eclipse sdk help

  

UIJob是一个通过asyncExec在UI线程内运行的作业。

只有一个UI线程,两个UIJob:s不能等待彼此,它会造成死锁。

答案 1 :(得分:-1)

join之后调用schedule方法。

  

等到这个工作完成。这个方法将阻塞调用线程,直到   作业已完成执行,或直到此线程被中断。如果工作   尚未安排,此方法立即返回。一份工作一定不能   从其run方法的范围内加入。   如果在一个从内部重新安排自己的作业调用此方法   运行方法,连接将在第一次执行结束时返回。   换句话说,join将在第一次退出该作业时返回   RUNNING状态,或者一旦该作业进入NONE状态。   如果在作业管理器暂停时调用此方法,则此作业   只有在已经运行时才会加入;如果这份工作在等待或睡觉,   此方法立即返回。   请注意,使用join时存在死锁风险。如果调用线程拥有   联接线程正在等待的锁或对象监视器,死锁   将会发生。

了解详情:http://kickjava.com/src/org/eclipse/core/runtime/jobs/Job.java.htm#ixzz0qWh6Ahhe

相关问题