0
我想排除两个阅读线程通过休眠读取相同的记录。我的SSCCE和上面一样,但是两个线程都可以读取对象,而我期待Thread-2会抛出异常。休眠和锁定
Store类是我轻松创建Sessions的一个类。
我现在用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