[英]Java 8 - ReentrantLock/Locking an object
我想知道使用ReentrantLock是否可以解决我的问题; 我试图“锁定”(阻止其他线程访问/使用它)一个对象,直到完成某个操作,然后将其解锁,以便其他线程可以访问它。 我想到了使用sun的Unsafe#monitorEnter / exit,但这可能会导致死锁。
想象一下以下情况:
public void doSomething() {
Object object = someObject;
// Object should be locked until operation is complete.
doSomethingElse(object);
// Object should now be unlocked so other threads can use/access it.
}
public void doSomethingElse(Object object) {
// Something happens to the object here
}
这将是解决方案吗?
ReentrantLock reentrantLock = new ReentrantLock();
public void doSomething() {
Object object = someObject;
// Object should be locked until operation is complete.
reentrantLock.lock();
doSomethingElse(object);
reentrantLock.unlock();
// Unlock object for other threads after complete.
}
public void doSomethingElse(Object object) {
// Something happens to the object here
}
提前致谢。
我建议在doSomethingElse上使用同步方法
public void doSomething() {
Object object = someObject;
// Object should be locked until operation is complete.
doSomethingElse(object);
// Unlock object for other threads after complete.
}
public synchronized void doSomethingElse(Object object) {
// Something happens to the object here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.