Rag*_*Rag 22 java multithreading sleep
Java中是否有一个库可以执行以下操作?A thread应重复sleepx毫秒,直到条件变为真或达到最大时间.
当测试等待某些条件变为真时,这种情况通常发生.这种情况受到另一个人的影响thread.
[编辑]为了使它更清楚,我希望测试在失败前只等待X ms.它不能永远等待条件成为现实.我正在添加一个人为的例子.
class StateHolder{
boolean active = false;
StateHolder(){
new Thread(new Runnable(){
public void run(){
active = true;
}
}, "State-Changer").start()
}
boolean isActive(){
return active;
}
}
class StateHolderTest{
@Test
public void shouldTurnActive(){
StateHolder holder = new StateHolder();
assertTrue(holder.isActive); // i want this call not to fail
}
}
Run Code Online (Sandbox Code Playgroud)
ass*_*ias 20
编辑
大多数答案都集中在具有等待和通知或条件的低级API上(其工作方式大致相同):当您不习惯时,很难做到正确.证明:其中2个答案不正确使用等待.
java.util.concurrent为您提供高级API,其中隐藏了所有这些错综复杂的API.
恕我直言,当并发包中有一个实现相同的内置类时,没有必要使用wait/notify模式.
甲CountDownLatch为1的初始计数正是如此:
latch.countdown();boolean ok = latch.await(1, TimeUnit.SECONDS);举例:
final CountDownLatch done = new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
longProcessing();
done.countDown();
}
}).start();
//in your waiting thread:
boolean processingCompleteWithin1Second = done.await(1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
注意:CountDownLatches是线程安全的.