java并发2.3-锁

1.状态变量相互关联。线程的安全性定义要求无论是多线程中的时序或交替操作,都要保证不破坏那些不变的约束。

当一个不变的约束涉及多个变量时,变量之间不是彼此独立的:某个变量的值会制约其他变量的值。因此更新一个变量的时候,要在同一原子操作中更新其他几个。

2.法则3:为了保护状态的一致性,要在单一的原子操作中更新相互关联的状态变量

3.锁机制-synchronized块。java提供了强制原子性的内置锁机制:sychronized块。一个syschronized块有两部分:锁对象的引用,以及这个锁保护的代码块。格式如下:

 sychronized  (lock){ //访问或修改锁保护的共享状态}

注意,lock是调用方法的所在对象

4.内部锁(intrinsic locks):每个java对象对可以隐式的扮演一个用于同步的锁的角色;这些内置的锁被称作内部锁。内部锁在java中扮演了互斥锁(mutual exclusion lock)的角色,意味着至多一个线程拥有锁。

  注:执行线程进入synchronized块之前会自动获得锁;线程放弃对synchronized块的控制时自动释放锁。

5.内部锁的可重入性。当一个线程请求其他线程占用的锁时,请求线程将被阻塞。然而内部锁是可重入的。因此线程中试图获得它自己占用的锁时,会成功。

 注:程序清单2.7,暗示子类和父类中,覆盖的方法是同一个内部锁,因为调用方法的对象是一个。



疑问:如果lock是调用方法所在的对象,那么如果一个类(对象)有多个syschronized块时,那岂不是这些sychronized块都是同一个锁?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值