package org.tuyifei.dao;
/***
* 当线程a进出持有a的同步代码块后休眠,现在bool为false ,所以进入else,线程b持有b锁,相互等待,造成死锁
*/
public class Family implements Runnable {
private byte[] a = new byte[0];
private byte[] b = new byte[0];
private boolean bool = true;
public static void main(String[] args) {
Family family = new Family();
Thread r1 = new Thread(family);
Thread r2 = new Thread(family);
r1.setName("售票员1");
r2.setName("售票员2");
r1.start();
r2.start();
}
@Override
public void run() {
if (bool) {
bool = false;
synchronized (a) {
System.out.println(Thread.currentThread().getName() + "a");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (b) {
System.out.println(Thread.currentThread().getName() + "b");
}
}
} else {
bool = true;
synchronized (b) {
System.out.println(Thread.currentThread().getName() + "b");
synchronized (a) {
System.out.println(Thread.currentThread().getName() + "a");
}
}
}
}
}
线程死锁例子
最新推荐文章于 2020-11-27 14:00:54 发布