我有一个类,类中有方法a, b, c, d,我希望在执行a方法的时候b,c,d方法不能执行,b或c或d方法执行的时候a不能执行,b,c,d方法之间不需要同步,该如何实现?

解决方案 »

  1.   

    public synchronized void getM1(){
       a();
    }public synchronized void getM2(){
       b();
       c();
       d();
    }
      

  2.   

    使用ReentrantReadWriteLock可以很简单。private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    private ReadLock readLock = lock.readLock();
    private WriteLock writeLock = lock.writeLock();public void a() {
    writeLock.lock();
    try {
    //
    } finally {
    writeLock.unlock();
    }
    }public void b() {
    readLock.lock();
    try {
    //
    } finally {
    readLock.unlock();
    }
    }public void c() {
    readLock.lock();
    try {
    //
    } finally {
    readLock.unlock();
    }
    }public void d() {
    readLock.lock();
    try {
    //
    } finally {
    readLock.unlock();
    }
    }
      

  3.   

    怎么会这么多人竟然说这个与线程没有关系?如果没有多线程存在,怎么可能出现执行方法a时,不能执行b、c、d的说法
      

  4.   

    解决方案取决于LZ所希望的“不能执行”中的“不能”两个字具体是什么意思,如果“不能”指的是blocking,那么可以用ChDw的RW Lock的方案;如果“不能”指不符合约束条件时函数return false,那么用一个mutex和一个整数就可以搞定了。
      

  5.   

    做个标记,A运算时先改这个标记为1,BCD读这个标记,为1则不运行。运算完毕之前将它改为0,
    BCD运行时,将它改为2,A运算时先读取这个标记,如果为2则不运行。运算完毕之前将它改为0,