如何使Java线程等待另一个线程的输出?
我正在用一个应用程序逻辑线程和一个数据库访问线程来制作Java应用程序。他们都坚持为应用程序和都需要的整个生命周期,以在同一时间运行(一个会谈到服务器,一个谈判给用户;当应用程序完全启动,我需要两个人工作)。
但是,在启动时,我需要确保最初应用线程等待直到数据库线程准备就绪(当前是通过轮询自定义方法确定的dbthread.isReady()
)。我不介意应用线程在数据库线程准备就绪之前是否阻塞。
Thread.join()
看起来不是解决方案-db线程仅在应用程序关闭时退出。
while (!dbthread.isReady()) {}
可以工作,但是空循环会消耗很多处理器周期。
回答:
我真的建议你在进入神奇的多线程世界之前,先阅读Sun的Java Concurrency之类的教程。
还有许多不错的书(有关“ Java并行编程”,“ Java并发实践”的Google书籍)。
为了得到你的答案:
在必须等待的代码中dbThread
,你必须具有以下内容:
//do some worksynchronized(objectYouNeedToLockOn){
while (!dbThread.isReady()){
objectYouNeedToLockOn.wait();
}
}
//continue with work after dbThread is ready
在你dbThread的方法中,你需要执行以下操作:
//do db worksynchronized(objectYouNeedToLockOn){
//set ready flag to true (so isReady returns true)
ready = true;
objectYouNeedToLockOn.notifyAll();
}
//end thread run method here
objectYouNeedToLockOn在这些示例中,我正在使用的对象最好是你需要从每个线程并发操作的对象,或者你可以Object为此目的创建一个单独的对象(我不建议使方法本身同步):
private final Object lock = new Object();//now use lock in your synchronized blocks
进一步理解:
还有其他(有时更好)的方法可以完成上述操作,例如使用CountdownLatches,等等。由于Java 5,java.util.concurrent程序包和子程序包中有许多漂亮的并发类。你确实需要在线查找资料以了解并发性,或获得一本好书。
以上是 如何使Java线程等待另一个线程的输出? 的全部内容, 来源链接: utcz.com/qa/430572.html