如何使线程等到另一个线程在java中完成执行? 使用while(true)将引入wait。但这是一个很好的编程实践吗?
但它会加热手机吗?
答案 0 :(得分:4)
我会使用倒计时锁存器(这里有一些伪代码 - 意思是我没有编译或运行它,它只是为了给出一个想法)。
// create the count down latch and initialize it to 1 as we wait for one background thread to finish
final CountDownLatch cdl = new CountDownLatch(1);
// Start the background thread and give it a reference to the count down latch
final Thread thread = new Thread(new Runnable {
public void run() {
try {
// do work here
} finally {
cdl.countDown();
}
}
}
thread.start();
// We wait till the background thread completes
cdl.await();
好处是,这是相当高的水平,我们可以通过使用不同的计数等待多个事情。
答案 1 :(得分:2)
更好的方法是致电:
threadThatYouWantToWaitFor.join()
在另一个帖子中。
答案 2 :(得分:1)
这取决于。退房:
while (true) {
if (shouldBreakOnSomeCondition()) {
break;
}
}
与
while (true) {
if (shouldBreakOnSomeCondition()) {
break;
}
sleep some time
}
第一个将是"活跃"等待...并燃烧了大量的CPU周期。
第二件事是资源消耗较少;但理想情况下,你仍然会尽量避免它;使用内置的通知机制;喜欢wait()和notify();或更高级的想法,如join()。
答案 3 :(得分:1)
您需要使用类Object的方法wait。
synchronized(obj) {
while (test) {
obj.wait();
}
}
在另一个帖子中
synchronized(obj) {
test = true;
obj.notifyAll();
}