java 哪些情况下会使对象锁释放
2024-09-28 08:19:07
Java_多线程_锁释放
问:Java多线程运行环境中,在哪些情况下会使对象锁释放?
答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:
(1)执行完同步代码块,就会释放锁。(synchronized)
(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exception)
(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进
入对象的等待池。(wait)
答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:
(1)执行完同步代码块,就会释放锁。(synchronized)
(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exception)
(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进
入对象的等待池。(wait)
除了以上情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。
在下面情况下,线程是不会释放锁的:
(1)执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
(2)在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
(3)在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁。
转自:http://blog.sina.com.cn/s/blog_51335a000101nxlb.html
最新文章
- Angular工作笔记
- MD5 32位 小写加密和大写加密
- openvpn安装
- ubuntu下nginx+php5的部署
- memory_limit的一个bug | 风雪之隅
- itextsharp、Aspose.Words、Aspose.Cells联合使用
- 【Hadoop代码笔记】Hadoop作业提交之TaskTracker 启动task
- AOP面试遇到的问题
- 发现一个名为“Douyu”的国人项目
- Ajax跨域问题的出现和解决
- python数据结构之栈与队列
- bzoj3309DZY Loves Math
- Windows下配置vue的环境
- C# 01 Primitive Types and Expressions
- linux上创建svn服务器(centos7.3)
- dedecms二次开发
- [Node.js] 04 - Event and Callback
- 【HTML】HTML之marquee详解
- Nginx记录-Nginx配置
- 06python 之基本数据类型