java Synchronized 多线程同步

11 篇文章 0 订阅

如下代码:

public class SyncClass{

public static object lockObje = new object()

synchronized void syncMethod1(){}

synchronized void syncMethod2(){}

void syncMethod3(){synchronized(this)}

void syncMethod4(){synchronized(obj){}}

synchronized static void syncMethod5(){}

synchronized Static void syncMethod6(){}

 

}

同一实例a = new SyncClass()

1.a.syncMethod1(),a.syncMethod2()不能并发执行,a.syncMethod3()中的函数体不能和前两个并发执行。此时,执行三个函数,当需要获得lock时,它们需要的锁是同一个,就是a这个object;

2.前三个和a.syncMethod4(),a.syncMethod5()或者a.syncMethod6()可并发执行,a.syncMethod4()请求的锁是obj,a.syncMethod5或者a.syncMethod6()请求的锁是SyncClass(java.lang.object.class)

3.a.syncMethod5()或者a.syncMethod6()不能并发执行,因为它们请求的锁都是SyncClass(java.lang.object.class)

 

不同实例a = new SyncClass();b = new SyncClass()

1.a.syncMethod1()和b.syncMethod1()可并发执行,请求的锁对象不同,一个为a,另一个是b

2.a.syncMethod5()和b.syncMethod5()不能并发,因为请求的锁均为SyncClass(java.lang.object.class).

synchronized 用在不同的地方,是否能够同步要看请求的锁引用是否相同

update 2011年2月2日

如有synchronized(SyncClass.lockObjec) ,则请求的锁同是SyncClass(java.lang.object.class)??,有待确认

如有synchronized(a.lockObject)和synchronized(b.lockObject),则请求锁相同,只能有一个可以执行

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值