동시성 잠금이 중요한 이유를 이해하려고합니다 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}}
은 죽은 잠금을 유발하지 않습니다. 자원에 대한 모니터를 얻는 경우 고유 잠금의 경우 다시 원할 경우 교착 상태 잠금없이이를 확보 할 수 있습니다.