哪些操作释放锁和不释放锁.死锁
释放锁的操作
(1)当前线程的同步方法.同步代码块执行结束
(2)当前线程在同步代码块.同步方法中遇到了break,return终止了同步代码块.同步方法的执行.
(3)当前线程在同步代码块.同步方法中出现了未处理的Error或者Exception,导致当前线程异常结束
(4)当前线程在同步代码块.同步方法中执行了锁对象的wait()方法,当前线程被挂起,并释放锁
不会释放锁的操作
(1)线程执行同步代码块或同步方法时,程序调用Thread.sleep().Thread.yield()方法暂停当前线程的执行.
sleep和wait方法的区别
(1)sleep不会释放锁,wait方法会释放锁
(2)sleep是Thread类,Thread.sleep(xx)
wait是Object类声明的,同步锁/监视器调用
死锁
什么是死锁
当两个线程互相持有对方想要的锁,而进入循环等待.
尽量避免嵌套的代码块,这样能有效防止死锁
一个产生死锁的代码
/**
*
*/
package per.leiyustudy.thread.safe;
/**
* @author 雷雨
*
* 测试死锁
*
* 尽量避免嵌套的代码块,这样能有效防止死锁
*
*/
public class TestDeadLock {
public static void main(String[] args) {
Object girl