0

書き込みロックの取得中に問題が発生し、 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 は書き込みロックの取得を (無限に) 待っています!!

異なるスレッドが取得したすべてのロックをリセットしてから、書き込みロックを取得できますか? 別の方法があれば提案してください..

4

0 に答える 0