JUC并发编程—共享模型中多线程管理解析(下)

4.6 Monitor 概念

结构

锁升级过程

原理基础:synchronized 是可重入、不公平的重量级锁,所以可以对其进行优化

可重入锁:线程可以进入任何一个它已经拥有的锁所同步着的代码块,可重入锁最大的作用是避免死锁

过程:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 ( 随着竞争的增加,只能锁升级,不能降级)

偏向锁

轻量级锁

使用场景:一个对象有多个线程要加锁,但加锁的时间是错开的(没有竞争),可以使用轻量级锁来优化,轻量级锁对使用者是透明的(不可见)

轻量级锁在没有竞争时(锁重入时),每次重入仍然需要执行 CAS 操作,Java 6 才引入的偏向锁来优化

重量级锁

锁消除、锁粗化

4.7 wait notify 原理

4.8 Park & Unpark

说明:它们是 LockSupport 类中的方法

 暂停当前线程 LockSupport.park();

 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)

使用:

原理:类似生产者消费者

每个线程都有自己的一个 Parker 对象,由三部分组成 _counter , _cond 和 _mutex 打个比喻

线程就像一个旅人,Parker 就像他随身携带的背包,_cond条件变量就好比背包中的帐篷。_counter 就好比背包中的备用干粮(0 为耗尽,1 为充足)

4.9 重新理解线程状态转换

4.10 多把锁

4.11 活跃性

死锁

活锁

饥饿

一个线程由于优先级太低,始终得不到 CPU 调度执行,也不能够结束

4.12 ReentrantLock

相对于 synchronized

基本语法

可打断、可重入

锁超时

立刻失败

超时失败

公平锁

条件变量

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值