ReentrantReadWriteLock - 由于读锁定

时间:2016-03-30 13:30:38

标签: java multithreading reentrantreadwritelock

我在获取写锁定时遇到问题,然后使用 ReentrantReadWriteLock 执行某些操作

有两个类说ClassA和ClassB 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正在等待(无限)获取Write lock !!

我们可以重置不同线程获取的所有锁,然后获取写锁吗? 如果还有其他方法,请建议..

0 个答案:

没有答案