while(!anotherThread.isDone()); 要么 while(!anotherThread.isDone()) Thread.sleep(5); 正如其他人所说,在这种情况下最好只使用join.但是,我想概括一下你的问题并提出以下问题: 通常,当一个线程正在等待
while(!anotherThread.isDone());
要么
while(!anotherThread.isDone()) Thread.sleep(5);正如其他人所说,在这种情况下最好只使用join.但是,我想概括一下你的问题并提出以下问题:
通常,当一个线程正在等待依赖于另一个线程发生的事件时,最好是:
>使用阻塞机制(即连接,条件变量等)或
>忙碌的旋转,没有睡觉或
>忙碌的睡眠?
现在让我们看看每种情况的含义是什么:
>在这种情况下,使用阻塞调用将有效地使您的线程脱离CPU,并且不会再次安排它直到预期的事件发生.有利于资源利用(否则线程会浪费CPU周期),但如果事件可能非常频繁地以较小的间隔发生,则效率不高(即上下文切换比事件发生所花费的时间更耗时) ).一般情况下最终会发生好事,但你不知道多久.>在第二种情况下,您正在忙着旋转,这意味着您正在积极使用CPU而不执行有用的工作.这与情况1相反:当预期事件很快发生时,它很有用,但否则可能会不必要地占用CPU.>这种情况是一种权衡.您正忙着旋转,但同时允许其他线程通过放弃CPU来运行.当你不想让CPU饱和时,通常会使用这种方法,但是事件很快就会发生,并且你想确保在它发生时几乎可以实时捕获它.