【发布时间】:2012-08-03 00:59:53
【问题描述】:
如果可以使用synchronized (this),我试图了解是什么让并发锁定如此重要。在下面的虚拟代码中,我可以做到:
- 同步整个方法或同步漏洞区域(
synchronized(this){...}) - 或使用 ReentrantLock 锁定易受攻击的代码区域。
代码:
private final ReentrantLock lock = new ReentrantLock();
private static List<Integer> ints;
public Integer getResult(String name) {
.
.
.
lock.lock();
try {
if (ints.size()==3) {
ints=null;
return -9;
}
for (int x=0; x<ints.size(); x++) {
System.out.println("["+name+"] "+x+"/"+ints.size()+". values >>>>"+ints.get(x));
}
} finally {
lock.unlock();
}
return random;
}
【问题讨论】:
-
顺便说一句,所有 java 内在锁本质上都是可重入的。
-
@pongapundit 所以
synchronized(this){synchronized(this){//some code}}不会导致死锁。对于内在锁,如果他们获得对资源的监视器,并且如果他们再次想要它,他们可以在没有死锁的情况下获得它。 -
object.lock;......;object.unlock 等于 synchronized(this.class) 它是类级别的锁而不是对象级别的
标签: java multithreading concurrency synchronize reentrantlock