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();