1
CountDownLatch를 사용하여 the advice I found in this post을 추적했는데 문제가 있습니다. 내가이 테스트를 작성하고 그것을 실행하고 내 스레드가 내가 자물쇠에 동기화하려고하면 블록을 만들었습니다.Countdown을 시도 할 때 동기화가 차단되는 이유
private CountDownLatch lock = new CountDownLatch(1);
@Test
public void testBlock() {
Runnable r = new Runnable() {
@Override
public void run() {
try
{
synchronized(this) {
this.wait(50);
}
}
catch (InterruptedException e)
{
e.printStackTrace();
throw (new RuntimeException(e));
}
releaseLock();
}
};
Thread t = new Thread(r);
t.setDaemon(true);
t.start();
waitOnCallback();
}
private void releaseLock() {
synchronized(lock) { // Thread t blocks here
lock.countDown();
}
}
private void waitOnCallback() {
synchronized(lock) {
try
{
lock.await();
}
catch (InterruptedException e)
{
throw new RuntimeException(e);
}
}
}
왜이 기능이 작동하지 않습니까?
굉장! 무리 감사. – Ring
@ 링 - 네. 불행히도 그 예제는 좋지 않습니다. – jtahlborn