您的位置:首页 > 其它

线程死锁例子

2017-01-18 18:04 405 查看
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");
}
}

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: