方案一:
定义两个CFun对象,a,b
使用FunA,FunB1,FunC1方法时,同步使用对象a.
使用FunB2,FunC2方法时,同步使用对象b.
方案二:
将五个方法,合并为二个方法,通过参数判断执行的语句,两个方法对应楼主说的两种同步方法。

解决方案 »

  1.   

    引用 Thinking in Java 里的一句话:
    如果你要同步一个类里的某个方法,那么将所有的方法都同步
    If you need to synchronize one method in a class, synchronize all of them. It’s often difficult to tell for sure if a method will be negatively affected if you leave synchronization out.
      

  2.   

    所有方法加上synchronized关键字   
    不就搞定了可能是考虑性能问题吧
      

  3.   

    朋友给我写了个例子。大家看一下,是否可行。
    Class CFun
    {
        private int sycA,sycB;
        private void FunA()
        {
            synchronized(sycA)
            {
               //函数代码
            }
        }
        private void FunB1()
        {
            synchronized(sycA)
            {
               //函数代码
            }
        }
        private void FunC1()
        {
            synchronized(sycA)
            {
               //函数代码
            }
        }
        
        private void FunB2()
        {
            synchronized(sycB)
            {
               //函数代码
            }
        }
        private void FunC2()
        {
            synchronized(sycB)
            {
               //函数代码
            }
        }
    }
      

  4.   

    看了看楼主写的两个条件.
    那是不是可以理解,三个线程是可以执行同一个方法的.
    如果可以这样理解,那么每个方法前都加synchronized 是不是就否定了三个线程执行同一个方法.