1. 以下同步代码
   synchronized(object)
   {
       //对object的操作代码
   }
  
   如果我有另外一个线程里的完全无关的函数
   void fun()
   {
      //对object的操作代码
   }
   假设现在已经进入了前面那段代码,那么fun函数对object的访问代码还能执行吗吗?
   还是需要将fun函数写成以下形式?
   void fun()
   {
      synchronized(object)
      {
        //对object的操作代码
      }
   }2. class MyClass
   {
     void synchronized fun()
     {
        ...
     }
   }
    那么两个线程中的两个不同的MyClass对象A和B,它们调用fun时,A.fun()和B.fun()是不是互斥的呢?即A.fun()执行时,B.fun()能不能执行呢?

解决方案 »

  1.   

    1. 在fun中,如果你不使用synchronized都是可以访问object的内容的,但是你最好注意这样的访问会不会导致有线程安全问题2. 对于不同的对象而言,它们的执行是不互斥的,因为它们的锁是对对象而言,而不是类而言(如果是静态方法则是对类而言)
      

  2.   

    那么在第二个例子中,如果类中还定义了其他的同步函数synchronized fun2(),synchronized fun3(),当一个线程调用A.fun()时,其他线程就不能调用A.fun(),A.fun1(),A.fun2()以及其他的A的synchronized成员函数了,是吗?