최대 절전 모드를 통해 동일한 레코드를 읽는 두 개의 읽기 스레드를 제외하려고합니다. 내 SSCCE는 위와 같지만 두 스레드가 객체를 읽을 수 있지만 Thread-2가 예외를 throw 할 것으로 예상했습니다.최대 절전 모드 및 잠금
Store 클래스는 세션을 쉽게 만들 수있는 클래스입니다.
지금 HSQLDB로 테스트 중이며, 잠금 기능이 없을 수도 있습니다.
업데이트 무엇이 아우 구스토가 제안했지만 여전히 동일합니다. 스레드 2
new Thread(new Runnable() { // Thread-1
@Override
public void run() {
Session ses = Store.$.ses();
Object x = ses.load(Client.class, 1l,
new LockOptions(LockMode.PESSIMISTIC_WRITE));
System.err.println("T1 :"+(x==null));
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
}
ses.close();
}
}).start();
Thread.yield();
new Thread(new Runnable() { // Thread-2
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
}
Session ses = Store.$.ses();
Object x = ses.load(Client.class, 1L,
new LockOptions(LockMode.PESSIMISTIC_WRITE).setTimeOut(1));
System.err.println("T2 :"+(x==null));
ses.close();
}
}).start();
Output:
T1: false
t2: false
업데이트를 확인하십시오. – Augusto