java线程死锁代码_线程的死锁的代码

讲一下线程的死锁,当多个线程抢占一个资源就会造成死锁

过多的同步可能会造成死锁

线程的死锁Java多线程:死锁 - 平凡希 - 博客园​www.cnblogs.com53ff3e4c99de650894e78a0d4659aa80.png

package cn.jd.syn;

/*

* 死锁:过多的同步可能造成相互不释放资源

* 从而相互等待,一般发生于同步中持有多个对象的锁

* 如何解决:不要在同一个代码块中,同时持有多个对象的锁

* 第二个锁在第一个锁里面才能造成死锁

*/

public class DeadLock {

public static void main(String[] args) {

Makeup g1 = new Makeup(1, "哈哈");

Makeup g2 = new Makeup(0, "呵呵");

g1.start();

g2.start();

}

}

//口红

class Lipstick {

}

//镜子

class Mirror {

}

//化妆

class Makeup extends Thread {

// 表示一面口红和一个镜子

static Lipstick lipstick = new Lipstick();

static Mirror mirror = new Mirror();

// 选择

int choice;

// 名字

String girl;

public Makeup(int choice, String girl) {

this.choice = choice;

this.girl = girl;

}

@Override

public void run() {

// 化妆

makeup();

}

// 相互持有对方的对象锁-->可能造成死锁

private void makeup() {

if (choice == 0) {

synchronized (lipstick) {// 获得口红的锁

System.out.println(this.girl + "涂口红");

// 1秒后想拥有镜子的锁

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

synchronized (mirror) {

System.out.println(this.girl + "照镜子");

}

} else {

synchronized (mirror) {// 获得口红的锁

System.out.println(this.girl + "照镜子");

// 1秒后想拥有口红的锁

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

synchronized (lipstick) {

System.out.println(this.girl + "涂口红");

}

}

}

}53b21feb52521129cc2520391032aba9.pnghttps://www.zhihu.com/video/1233502156348964864

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值