首页 > 编程语言 > 详细

Java死锁

时间:2021-04-13 23:52:44      阅读:23      评论:0      收藏:0      [点我收藏+]

解释:

男的要女孩,小偷要钱

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("小偷拿到了钱,放开了女孩");
                    }
                }
            }
        }
    }
}

Java死锁

原文:https://www.cnblogs.com/lwxx/p/14655066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!