博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程锁释放
阅读量:6828 次
发布时间:2019-06-26

本文共 517 字,大约阅读时间需要 1 分钟。

hot3.png

Java多线程运行环境中,在哪些情况下会使对象锁释放?

由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:

(1)执行完同步代码块,就会释放锁。(synchronized)

(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exception)
(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进入对象的等待池。(wait)

除了以上情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。
在下面情况下,线程是不会释放锁的:
(1)执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
(2)在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
(3)在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁

转载于:https://my.oschina.net/projerry/blog/866100

你可能感兴趣的文章
100V/60Hz,三相200V/60Hz 变频电源的标准电压频率是叫什么?
查看>>
CNN初探
查看>>
在线思维导图工具
查看>>
T-MBA·活动报道 | 第三期第四课:卓越演讲影响力-合适的地点说恰当的话
查看>>
Google官方架构MVP解析与实战进阶必学系列
查看>>
吐槽java时间那点事儿 Joda Time
查看>>
体验JBOOT(一)-- Hello, Jboot
查看>>
ubuntu 安装 mongodb
查看>>
JAVA多线程和并发基础面试问答
查看>>
通过Unison实现文件的双向同步
查看>>
nodeJS监控任务完成并通知
查看>>
Hessian学习—Hessian入门
查看>>
QML学习笔记-介绍篇(1)
查看>>
gcc 的原子操作实现自旋锁
查看>>
Socket详解(记录一)
查看>>
Oracle 分析函数
查看>>
SpringBoot基础教程1.1.1 项目搭建
查看>>
Jenkins打包记录导至服务磁盘空间不够
查看>>
设计模式C++实现(2)——策略模式
查看>>
微信小程序五-列表渲染多层嵌套循环及wx:key的使用
查看>>