//死锁:多个线程相互抱着对方需要的资源,然后形成僵局 public class DeadLock { public static void main(String[] args) { Makeup makeup1 = new Makeup(0,"小老虎"); Makeup makeup2 = new Makeup(1,"小湖裏"); makeup1.start(); makeup2.start(); } } //口红 class睿共享 Lisptick{ } //镜子 class Mirror{ } class Makeup extends Thread{ //需要的资源只有一份,用static来保证只有一份 static Lisptick lisptick = new Lisptick(); static Mirror mirror = new Mirror(); int choise;//选择 String girlName;//使用化妆品的人 public Makeup(int choise,String girlName){ this.choise=choise; this.girlName=girlName; } public void run(){ //化妆 try { makeup(); } catch (InterruptedException e) { e.printStackTrace(); } } //互相持有对方的锁,就是需要拿到对方的资源 private void makeup() throws InterruptedException { if(choise==0){ //获得口红的锁 synchronized(lisptick){ System.out.println(this.girlName+"获得口红的锁"); Thread.sleep(1000); synchronized(mirror){//一秒钟后获得镜子的锁 System.out.println(this.girlName+"获得镜子的锁"); } } }else{ //获得口红的锁 synchronized(mirror){ Sys睿共享 tem.out.println(this.girlName+"获得镜子的锁"); Thread.sleep(2000); synchronized(lisptick){//一秒钟后获得镜子的锁 System.out.println(this.girlName+"获得口红的锁"); } } } } } --------------------------解决死锁---------------
把内部的synchronized提到外边的synchronize外面去 //死锁:多个线程相互抱着对方需要的资源,然后形成僵局 public class DeadLock { public static void main(String[] args) { Makeup makeup1 = new Makeup(0,"小老虎"); Makeup makeup2 = new Makeup(1,"小湖裏"); makeup1.start(); makeup2.start(); } } //口红睿共享 class Lisptick{ } //镜子 class Mirror{ } class Makeup extends Thread{ //需要的资源只有一份,用static来保证只有一份 static Lisptick lisptick = new Lisptick(); static Mirror mirror = new Mirror(); int choise;//选择 String girlName;//使用化妆品的人 public Makeup(int choise,String girlName){ this.choise=choise; this.girlName=girlName; } public void run(){ //化妆 try { makeup(); } catch (InterruptedException e) { e.printStackTrace(); } } //互相持有对方的锁,就是需要拿到对方的资源 private void makeup() throws InterruptedException { if(choise==0){ //获得口红的锁 synchronized(lisptick){ System.out.println(this.girlName+"获得口红的锁"); Thread.sleep(1000); } synchronized(mirror){//一秒钟后获得镜子的锁 System.out.println(this.girlName+"获得镜子的锁"); } }else{ //获得口红的锁 synchronized(mirror){ System.out.println(this.girlName+"获得镜子的锁"); Thread.sleep(睿共享 2000); }睿共享 synchronized(lisptick){//一秒钟后获得镜子的锁 System.out.println(this.girlName+"获得口红的锁"); } } } }