Single Thread Execution 模式与Immutable模式

1、在single Thread execction 模式下,满足一下条件,死锁就会发生
假设:想吃东西必须拥有叉子和勺子
(1)存在多个sharedResource 包——叉子和勺子
(2)线程在持有着某个SharedResource 角色的锁的同时,还想获取其他SharedResource角色的锁——持有勺子的人想要拿到对方的叉子
(3)获取SharedResource角色的锁的顺序并不固定(SharedResource角色是对称的)——拿叉子相当于拿勺子,两者不分先后顺序
2、synchronized语法和Before/After模式
问:是否可以用lock unlock来取代synchronized?
如:

void method(){
	lock();
	...
	unlock();
}

简单来说没问题,但实际考虑如果方法中由return,则unlock永远不会执行;如果在方法中间由异常抛出,那unlock也不会执行,可以用finally解决

void method(){
	lock();
	try{
	...
	}finally{
		unlock();
	}
}

2、Immutable 模式——不变、不发生改变
对于适用于Immutable模式的类,我们无需使用synchronized方法执行线程的互斥处理,因为及时不使用synchronized,也能确保安全性。
何时使用:
(1)实例创建后,状态不再发生变化时
实例的状态是由字段的值决定的,所以将字段声明为final,且不存在setter方法是重点所在。
(2)实例是共享的,且被频繁访问时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值