黑马程序员技术交流社区

标题: java synchronized同步静态方法和同步非静态方法的异同 [打印本页]

作者: axuan    时间: 2014-6-10 14:51
标题: java synchronized同步静态方法和同步非静态方法的异同
public class Test  
{  
  public void method1()  
  {  
    synchronized(this)  
     {  
  
     }  
  }  
  
public synchronized void method2()  
  {  
  
  }  
}  java synchronized同步静态方法和同步非静态方法的异同?
作者: 九号球    时间: 2014-6-10 15:10
本帖最后由 九号球 于 2014-6-10 15:12 编辑

    首先,你写的这两个代码是同步函数同步代码块,两者的同步锁为this,如果函数和代码块中内容相同的话,实际使用上并没有区别。
    而静态同步方法的写法为:public static synchronized method()
                                                                                                             {                                 
                                                        }
      而静态同步方法的同步锁为该方法所在类的字节码文件对象,也就是类名.class。         


作者: 心灵的微幸福    时间: 2014-6-10 15:22
不同之处:在使用synchronized块来同步方法时,非静态方法可以通过this来同步(函数需要被对象调用,那么函数的每一个所属对象的引用就是this,所以同步函数使用的锁是this锁),而静态方法必须使用class对象来同步(静态进内存,内存中没有本类对象但是一定有该类对应的字节码文件对象),但是非静态方法也可以通过使用class来同步静态方法。但是静态方法中不能使用this来同步非静态方法。
相同之处:都是处理安全机制的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2