A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lidongzhe 初级黑马   /  2016-5-24 23:56  /  286 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马