2014/9/4
锁在什么时候释放?
分为两种情况:
一。在该线程的同步方法,同步代码块中。
1.该线程的同步方法、同步代码块执行完。
2.该线程同步方法、同步代码块中遇到return,break.
3.该线程同步方法、同步代码块中发生了未处理的Exception、Error
二、在其他线程中。
4.其他线程执行了同步监听器对象的wait().
5.其他线程执行了当前线程的stop.
在以下情况中,线程不会释放锁。(在当前线程的同步代码中)
1.在该线程的同步方法,同步代码块中thread.sleep(),thread.yield().
2.其他线程调用了该线程的suspend()方法。
便于记忆:
在当前线程的同步代码块中
线程停止(线程停止只有run()方法结束,而run()方法结束,包含下述述情况)。(stop方法失效)
会引起锁释放的条件:
1.同步方法、同步代码块执行完。
2.同步方法、同步代码块中遇到return,break.
3.同步方法、同步代码块中发生了未处理的Exception、Error
4.同步方法、同步代码块中,wait();
不会引起锁释放:
1.Thread.sleep();
2.Thread.yield();
本文出自 “厚积薄发” 博客,请务必保留此出处http://duanzhenyue.blog.51cto.com/9360091/1550142
原文地址:http://duanzhenyue.blog.51cto.com/9360091/1550142