

package com.pln.syn;public class DeadLock { public static void main(String[] args) { MakeUp g1 = new MakeUp(0,"小明"); MakeUp g2 = new MakeUp(1,"小宏"); g1.start(); g2.start(); }}//口红class Lipstick{}//镜子class Mirror{}class MakeUp extends Thread{// 需要的资源只有一份,用statie来保证只有一份 static Lipstick lipstick = new Lipstick(); static Mirror mirror = new Mirror(); int choose;//选择 String girlName;//使用化妆品的人 MakeUp(int choose,String girlName){ this.choose = choose; this.girlName = girlName; } public void run(){// 化妆 try { makeup(); } catch (InterruptedException e) { e.printStackTrace(); } }// 化妆,互相持有对方的锁,就需要拿到对方的资源 private void makeup() throws InterruptedException { if (choose==0){ synchronized (lipstick){ //获得口红的锁 System.out.println(girlName+"获得口红的锁"); Thread.sleep(1000); } synchronized (mirror){ //获得镜子的锁 System.out.println(girlName+"获得镜子的锁"); } }else{ synchronized (mirror){ //获得镜子的锁 System.out.println(girlName+"获得镜子的锁"); Thread.sleep(2000); } synchronized (lipstick){ //获得口红的锁 System.out.println(girlName+"获得口红的锁"); } } }}
