运行上面的程序 , 会导致thread02线程所在的CPU飙升到100% 。
这里 , 有很多小伙伴不太明白为啥LockSupport.park();会导致thread01会永远阻塞 。这里 , 冰河为你画了一张线程的生命周期图 , 如下所示 。

文章插图
这下明白了吧?在线程的生命周期中 , 有几个重要的状态需要说明一下 。
- NEW:初始状态 , 线程被构建 , 但是还没有调用start()方法 。
- RUNNABLE:可运行状态 , 可运行状态可以包括:运行中状态和就绪状态 。
- BLOCKED:阻塞状态 , 处于这个状态的线程需要等待其他线程释放锁或者等待进入synchronized 。
- WAITING:表示等待状态 , 处于该状态的线程需要等待其他线程对其进行通知或中断等操作 , 进而进入下一个状态 。
- TIME_WAITING:超时等待状态 。可以在一定的时间自行返回 。
- TERMINATED:终止状态 , 当前线程执行完毕 。
所以 , 在使用StampedLock时 , 一定要注意避免线程所在的CPU飙升的问题 。那如何避免呢?
那就是使用StampedLock的readLock()方法或者读锁和使用writeLock()方法获取写锁时 , 一定不要调用线程的中断方法来中断线程 , 如果不可避免的要中断线程的话 , 一定要用StampedLock的readLockInterruptibly()方法获取可中断的读锁和使用StampedLock的writeLockInterruptibly()方法获取可中断的悲观写锁 。
最后 , 对于StampedLock的使用 , JDK官方给出的StampedLock示例本身就是一个最佳实践了 , 小伙伴们可以多看看JDK官方给出的StampedLock示例 , 多多体会下StampedLock的使用方式和背后原理与核心思想 。
点击关注 , 第一时间了解华为云新鲜技术~
【StampedLock:一个并发编程中非常重要的票据锁】
经验总结扩展阅读
- 适合一个女人独自散心的地方签名
- 修心养性静心短句一个人安静独处经典句子
- 看开,看淡,舍得,放下的句子 一个人独处的霸气句子
- 2023处暑的谚语歌谣 处暑谚语大全
- 2023立秋和处暑是一个意思吗 立秋和处暑有什么区别
- 陈姓男孩大气响亮的名字 陈姓男孩取名100分
- 和哪一个星座男朋友谈恋爱会让你幸福到起飞
- 单身久了就想随便与另一个单身者凑合的星座
- 一个眼神就能让别人喜欢上他的星座男
- 哪些星座喜欢一个人时都不能做到从容面对