私が使用できる場合、並行性のロックが非常に重要になる理由を理解しようとしています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}}
はデッドロックを引き起こしません。組み込みロックの場合、リソースのモニターを取得し、それが再度必要な場合、デッドロックなしで取得できます。