書き込みロックの取得中に問題が発生し、 ReentrantReadWriteLockを使用して何らかの操作を行っています
ClassA と ClassB という 2 つのクラスがあります ClassA は書き込みロックを保持しています ClassB は読み取りロックを保持しています
public static final ReentrantReadWriteLock lock=new ReentrantReadWriteLock(); //defined in singleton class
ClassA{
public void onMessage(Message msg){
if(update is received from UI){
lock.writeLock().lock();
try{
//critical code here
}finally{
lock.writeLock().unlock();
}
}
}
}
ClassB{
public void onMessage(Message msg){
if(NO update is received from UI){
lock.readLock().lock();
try{
//critical code here
}finally{
lock.readLock().unlock();
}
}
}
}
ユーザーが更新/作成できる UI があります。このイベントが発生すると、ClassA の書き込みロックがアクティブになり、ClassB のリーダーがブロックされます。
しかし、不思議な理由で、ClassA は書き込みロックの取得を (無限に) 待っています!!
異なるスレッドが取得したすべてのロックをリセットしてから、書き込みロックを取得できますか? 別の方法があれば提案してください..