synchronized实现同步的三种用法

来源:互联网 发布:数据交换架构 编辑:程序博客网 时间:2024/06/06 01:54

1:对于普通同步方法,锁的是当前实例的对象。

意思是

class A {synchronized test(){system.out.print("lock object");}}
A a = new A();
A a1 = new A();
a.test();
这个时候锁住的是a.然而a1并不会被锁住。

2:对于静态同步方法,锁的则是当前类的class对象。

意思是

class A {static synchronized test(){system.out.print("lock object");}}
A a = new A();
A a1 = new A();
a.test();
这个时候锁住的是整个A的class,a1也被锁住了。

3:对于同步方法块,锁住的是synchonized括号内配置的对象。

class A{test(A a){synchronized(a){a=new A();}}}
这个就是锁的对象a,

A a =new A();

A a1 =new A();

a.test(a1);

这实际上锁的是a1 这个对象。


0 0
原创粉丝点击