在方法A、B、C的定义中加上synchronized。

解决方案 »

  1.   

    给这些静态方法加上sychronized关键字,就可以让这些函数公用同一把锁,使在该类的Class对象上同步(如果不是静态方法,则是在当前对象上即this引用上使整个方法同步)。对于第二个问题,答案是肯定的。
    但是楼主描述有点问题。其他线程必须是在该Class对象上调用notify()方法,通常不是在Thread本身上调用这些方法,而且A线程必须在该对象上等待,这样才有可能唤醒线程A。
      

  2.   

    做一个singleton : Lock, 设Lock.getLock()得到唯一的instancepublic static A() { //B、C
        synchronized(Lock.getLock()) {
             .......;
        }
    }另一个是基本问题,看看书,你的理解有误
      

  3.   

    bdsc()是高手啊,向你学习!
      

  4.   

    如果用的是 P-V 原语的方式的话,把检查和设置信号量的那个函数共享,并且同步这个方法,使得不可能有两个程序同时进入检查信号量的函数,这样就可以实现对临界区的保护。(偶表达不好)
    像这样:
    ...public static synchronized void check(Object obj) {
       //if 信号量还有
       //then 从信号量拿走一,批准 obj 进入临界区,然后返回
       //else 阻塞 obj
    }...{
       a = ...
       XXX.check(a);
       ...
    }偶的方法不好,不过偶当时就是这么做的,也不知是不是应该这样实现