package com.lyon.demo; import jdk.nashorn.internal.ir.CallNode; //死锁: 多个线程相互持有对方需要的资源,形成僵持 public class DeadLock { public static void main(String[] args) { Makeup t1 = new Makeup(0, "小红"); Makeup t2 = new Makeup(1, "小兰"); t1.start(); t2.start(); } } //口红 class Lipstick{ } //镜子 class Mirror{ } class Makeup extends Thread{ static Lipstick lipstick =new Lipstick(); static Mirror mirror = new Mirror(); int choice;//选择 String girlName;//使用化妆品的人 public Makeup(int choice,String girlName){ this.choice = choice; this.girlName = girlName; } @Override public void run() { //化妆 try { makeup(); } catch (InterruptedException e) { e.printStackTrace(); } } //化妆 private void makeup() throws InterruptedException { //没有人用 if(choice==0){ synchronized (lipstick){ System.out.println(this.girlName+"获得口红的锁"); Thread.sleep(1000); // synchronized (mirror){//获取镜子 // System.out.println(this.girlName+"获得镜子的锁"); // } } synchronized (mirror){//获取镜子 System.out.println(this.girlName+"获得镜子的锁"); } }else{ synchronized (mirror){ System.out.println(this.girlName+"获得镜子的锁"); Thread.sleep(2000); // synchronized (lipstick){//获取镜子 // System.out.println(this.girlName+"获得口红的锁"); // } } synchronized (lipstick){//获取镜子 System.out.println(this.girlName+"获得口红的锁"); } } } }
多线程之DeadLock
最新推荐文章于 2023-05-25 17:44:12 发布