黑马程序员技术交流社区

标题: 死锁 [打印本页]

作者: lidongzhe    时间: 2016-5-24 23:56
标题: 死锁
java同步机制解决了线程安全问题,但是同时也引发了死锁现象。

死锁现象如何解决呢: 没法解决。 只能尽量的避免死锁现象。

死锁现象出现 的根本原因:
        1. 存在两个或者两个以上的线程存在。
        2. 多个线程必须共享两个或者两个以上的资源。


public class DeadLock {
        public static void main(String[] args) {
                new Thread(new Runnable() { // 创建线程, 代表中国人
                                        public void run() {
                                                synchronized ("刀叉") { // 中国人拿到了刀叉
                                                        System.out.println(Thread.currentThread().getName()
                                                                        + ": 你不给我筷子, 我就不给你刀叉");
                                                        try {
                                                                Thread.sleep(10);
                                                        } catch (InterruptedException e) {
                                                                e.printStackTrace();
                                                        }
                                                        synchronized ("筷子") {
                                                                System.out.println(Thread.currentThread()
                                                                                .getName() + ": 给你刀叉");
                                                        }
                                                }
                                        }
                                }, "中国人").start();
                new Thread(new Runnable() { // 美国人
                                        public void run() {
                                                synchronized ("筷子") { // 美国人拿到了筷子
                                                        System.out.println(Thread.currentThread().getName()
                                                                        + ": 你先给我刀叉, 我再给你筷子");
                                                        try {
                                                                Thread.sleep(10);
                                                        } catch (InterruptedException e) {
                                                                e.printStackTrace();
                                                        }
                                                        synchronized ("刀叉") {
                                                                System.out.println(Thread.currentThread()
                                                                                .getName() + ": 好吧, 把筷子给你.");
                                                        }
                                                }
                                        }
                                }, "美国人").start();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2