面试写一个进程死锁

来源:互联网 发布:手机图片裁剪软件 编辑:程序博客网 时间:2024/06/06 04:02

进程死锁的图片描述

如图所示:一个房间有两扇门A、B,其中每个门都有一把钥匙,如果有一个人在B中想进入A门,并且把B们的钥匙带在了身上,有一个进入了A门也把钥匙戴在了身上,这时候B中的不能进入A,A中的人不能进入B,所以导致了死锁。编写的java程序如下所示。

package threaddead;public class ThreadDead {    public static void main(String[] args) {        new ThreadDead().begin();    }    public void begin() {        MyThread mThread = new MyThread();        new Thread(mThread, "wang").start();        new Thread(mThread, "zhang").start();    }    class MyThread implements Runnable {        private Object k1 = new Object();//第一把锁        private Object k2 = new Object();//第二把锁        private boolean flag = true;        @Override        public void run() {            if (flag) {                flag = false;                synchronized (k1) {                    System.out.println(Thread.currentThread().getName() + ":k1");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    synchronized (k2) {                        System.out.println(Thread.currentThread().getName() + ":k2");                    }                }            } else {                flag = true;                synchronized (k2) {                    System.out.println(Thread.currentThread().getName() + ":k2");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    synchronized (k1) {                        System.out.println(Thread.currentThread().getName() + ":k1");                    }                }            }        }    }}
原创粉丝点击