Bar*_*lom 2 java multithreading locking
有没有办法在Java中做这样的事情(可能使用Lock而不是synchronized):
synchronized(lock) {
Thread t = spawnThread(new Runnable() {
synchronized(lock) {
doThing();
}
});
transferLockOwnership(lock, t);
}
Run Code Online (Sandbox Code Playgroud)
具体来说,我想替换这样的代码:
synchronized (lock) {
sendResponse(response);
doThingsAfterSending();
}
Run Code Online (Sandbox Code Playgroud)
有这样的事情:
synchronized (lock) {
Thread t = spawnThread(new Runnable() { @Override public void run() {
synchronized(lock) { doThingsAfterSending(); }
}});
transferLockOwnership(lock, t);
return response;
}
Run Code Online (Sandbox Code Playgroud)
您是否考虑过使用Semaphore1张许可证?例如
private Semaphore lock= new Semaphore(1);
// Instead of synchronized(lock)
lock.acquireUninterruptibly();
Thread t = spawnThread(new Runnable() {
@Override public void run() {
try {
// Do stuff.
} finally {
lock.release();
}
}
});
t.start();
Run Code Online (Sandbox Code Playgroud)