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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kingmask 中级黑马   /  2016-4-27 00:04  /  434 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5.实现死锁:
实现死锁的原理是两个进行同时进行时一个进程占用了另一个进程必须的资源而另一个进程却拿着此进程的必须资源,就这样两个进行相互索要资源,造成两个进程相互等待的状态
package com.itheima;
public class 实现死锁 {
    public static void main(String[]args) {
        DeadLock deadLock1=new DeadLock(true);
        DeadLock deadLock2=new DeadLock(false);
        Thread t1=new Thread(deadLock1,"一" );
        Thread t2=new Thread(deadLock2,"二" );
        t1.start();
        t2.start();
    }
}
class DeadLock implements Runnable {
    static Integer A = 1;//这里需要一个对象
    static Integer B = 2;
    private boolean flag;
    public DeadLock(){};
    public DeadLock(boolean flag){
        // TODO Auto-generated constructor stub
        super();
        this.flag = flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (true) {
            if (flag) {
                synchronized (String.class) {
                    System.out.println("线程:" + Thread.currentThread().getName()
                            + "拿到了A锁");
                    synchronized (Integer.class) {
                        System.out.println("线程:"
                                + Thread.currentThread().getName()+ "拿到了B锁");
                    }
                }
            } else {
                synchronized (Integer.class) {
                    System.out.println("线程:" + Thread.currentThread().getName()
                            + "拿到了B锁");
                    synchronized (String.class) {
                        System.out.println("线程:"
                                + Thread.currentThread().getName()+ "拿到了A锁");
                    }
                }
            }
        }
    }
}


0 个回复

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