Java面试问题之四十二_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java面试问题之四十二

Java面试问题之四十二

 2011/9/27 7:35:12  YuHuang.Neil  http://yuhuang-neil.iteye.com  我要评论(0)
  • 摘要:请问在Java多线程运行环境中,在哪些情况下会使对象锁释放?答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:(1)执行完同步代码块,就会释放锁。(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进入对象的等待池。除了上述情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁
  • 标签:面试 Java面试 Java 问题 面试问题
请问在Java多线程运行环境中,在哪些情况下会使对象锁释放?

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

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

除了上述情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。




知识扩展:
在下面情况下,线程是不会释放锁的:
(1)执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
(2)在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
(3)在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁。



发表评论
用户名: 匿名