A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Test  
{  
  public void method1()  
  {  
    synchronized(this)  
     {  
  
     }  
  }  
  
public synchronized void method2()  
  {  
  
  }  
}  java synchronized同步静态方法和同步非静态方法的异同?

2 个回复

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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 九号球 于 2014-6-10 15:12 编辑

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马