我需要制作一系列线程.他们需要按照以下顺序开始:
A然后B然后是C,最后是D.
D完成后,C可以完成B,然后是A.
在这种情况下,最好使用join()线程还是wait()?为什么?
我的线程需要启动并打印消息Hello我是线程a / b / c / d,当它们完成时,它们需要打印我已完成a / b / c / d.
解决方法
由于您正在等待“其他”线程完成(即完成执行),因此join()将是更好的选择.
join()的javadoc简单地说:等待这个线程死掉.
这个机制相对简单:
@Override public void run() { System.out.println("Hello I'm thread " + getName()); if (otherThread != null) { while (otherThread.isAlive()) { try { otherThread.join(); } catch (InterruptedException e) { // ignore } } } System.out.println("I'm finished " + getName()); }
要解释:您需要引用otherThread.所以a指b,b指c,c指d,d不指任何otherThread(它为null).
语句otherThread.join()等待另一个线程完成.它被包装在循环中,因为join()可以抛出InterruptedException(虽然在实践中很少).
希望这有帮助,祝你好运.