java的synchronized总结

来源:互联网 发布:淘宝单号购买 编辑:程序博客网 时间:2024/05/21 10:00
synchronized分为同步方法和同步块
public synchronized void A {  //A区域}public synchronized void B {  //B区域}public void C {  synchronized(this) {    //C区域  }}public void D {  synchronized(static_member) {//static_member为类静态成员变量    //D区域  }}public void E {  synchronized(member1) {//member1为类普通成员变量    //E区域  }}public void F {  synchronized(member2) {//member2为类普通成员变量    //F区域  }}public void G {  Object obj = new Object();  synchronized(obj) {    //G区域  }}
其中A、B、C、D是互斥的,他们获得的是类对象锁,同一时刻只能有一个线程进入到其中的一块区域。
E和F获得是普通对象锁,上述四种情况不会影响到其他线程对E和F的访问,E和F之间也没有冲突。但如果线程1已经进入到E区域,线程2也想进入E区域时则需要等待。
G区域属于无效锁定,因为obj是临时变量。
0 0