解释:
男的要女孩,小偷要钱
while无限循环直至死锁
小偷那一块我让他先睡了一会儿,不然很容易一开始就造成死锁,看不到整个过程。
整个过程就是,一直循环,男的锁着钱,然后锁住女孩,循环好几次,直到小偷苏醒锁住了女孩
此时男的正好锁住钱,小偷锁住女孩。互相不肯让。造成死锁。
public class DeadLock {
public static void main(String[] args) {
Lock man = new Lock();
man.flag = 0;
Lock thief = new Lock();
thief.flag = 1;
new Thread(man).start();
new Thread(thief).start();
}
}
class Lock implements Runnable {
public int flag;//为了让他们能共用锁对象所以放在一个类中用Flag判断
static Object money = new Object();//必须得是static,才能共用,去掉static你可以自己尝试一下
static Object girl = new Object();
@Override
public void run() {
while (true) {
//男的拿着钱,要求交换女孩
if (flag == 0) {
synchronized (money) {
System.out.println("放开那个女孩,我给你钱");
synchronized (girl) {
System.out.println("男孩救出了女孩,给了钱");
}
}
}
//小偷威胁女孩,要钱
if (flag == 1) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (girl) {
System.out.println("给我钱,我就放开这个女孩");
synchronized (money) {
System.out.println("小偷拿到了钱,放开了女孩");
}
}
}
}
}
}
原文:https://www.cnblogs.com/lwxx/p/14655066.html