Java锁定其他关键部分

时间:2014-03-31 21:17:09

标签: java multithreading

我有一个静态方法,可以被多个线程访问,如下所示。我想做的是允许任意数量的线程执行块1,只要没有线程当前正在执行块2,反之亦然。基本上,一个块的执行会锁定另一个块,但不会锁定自身。 ReentrantReadWriteLock有点做我想要的,因为我可以在块1周围放置一个读锁定,在块2周围放置一个写锁定,但它仍然受限制,因为我不能在多个线程执行块2同时。有什么建议?

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
        ...
    }
    ...
}

1 个答案:

答案 0 :(得分:1)

听起来你需要创建自己的同步对象:它有方法:enterA(),leaveA(),enterB(),leaveB();它将有一个互斥锁,一个条件var,以及一个属性aCount和bCount。

enterA:
    lock mutex
    wait on condition var until bCount is zero
    increment aCount
    unlock mutex

leaveA:
    lock mutex
    decrement aCount
    notify condition var if aCount==0
    unlock mutex

enterB()和leaveB()会相似,但会inc / dec bCount,并等待aCount == 0.