线程同步时,哪些操作会释放锁?哪些操作不会释放锁?

释放锁的操作:
1.当前线程的同步方法、同步代码块执行结束。
2.当前线程在同步代码块、同步方法中遇到break、return终止 了该代码块、该方法的继续执行。
3.当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致异常结束。
4.当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁。

不会释放锁的操作:
1.线程执行同步代码块或同步方法时,程序调用Thread. sleep()、Thread.yield()方法暂停当前线程的执行
2.线程执行同步代码块时,其他线程调用了该线程的suspend()方法将该线程挂起,该线程不会释放锁(同步监视器)。
➢应尽量避免使用suspend()和resume()来控制线程(已经过时啦)

你可能感兴趣的:(笔记)