使用while(true)更好的方法在android后台线程中引入wait

时间:2016-06-01 12:34:44

标签: java android

如何使线程等到另一个线程在java中完成执行? 使用while(true)将引入wait。但这是一个很好的编程实践吗?

但它会加热手机吗?

4 个答案:

答案 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();
}