2014-03-31 44 views
4

我有一个静态方法,它将被多个线程访问,如下所示。我想要做的是允许任意数量的线程执行块1,只要没有线程当前正在执行块2,反之亦然。基本上,一个块的执行会锁定另一个块,但不是它本身。 ReentrantReadWriteLock在某种程度上做了我想做的事情,因为我可以围绕块1放置一个读锁定,并围绕块2放置一个写锁定,但它仍然受限,因为我无法同时执行块2的多个线程。有什么建议么?Java锁定其他关键部分

public class SomeClass 
{ 
    ... 
    public static void someMethod() 
    { 
     ... 
     if(someCondition == true)   //Begin block 1 
     { 
      doSomething(); 
     }         //End block 1 

     else if(someCondition == false)  //Begin block 2 
     { 
      doSomething(); 
     }         //End block 2 
     ... 
    } 
    ... 
} 
+0

使用'volatile boolean'标志 –

+0

@parsaporahmad这不会建立关键区域,并会导致并发错误。 – user2864740

回答

1

听起来像是你需要创建自己的同步对象:这将有方法:enterA(),leaveA(),enterB(),leaveB();它会有一个互斥体,一个条件var,属性aCount和bCount。 enterB()和leaveB()会类似,但会inc/dec bCount,并等待aCount == 0。