我试图了解是什么使并发锁如此重要,如果可以使用的话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;
}
synchronized(this){synchronized(this){//some code}}
不会导致死锁。对于内在锁定,如果他们在资源上获得了监视,并且再次希望获得它,则可以在没有死锁的情况下获得它。