一个死锁算法

package cn.tedu.hh;



public class Demo implements Runnable
{ 
	    public static  int flag = 1;

	    //static 变量是 类对象共享的
	    static Object o1 = new Object();
	    static Object o2 = new Object();
	  public void run() {
	       System.out.println(Thread.currentThread().getName() + ":此时 flag = " + flag);
	        if(flag == 1){
	            synchronized (o1){
	                try {
	                    System.out.println("我是" + Thread.currentThread().getName() + "锁住 o1");
	                    Thread.sleep(3000);
	                    System.out.println(Thread.currentThread().getName() + "醒来->准备获取 o2");
	                }catch (Exception e){
	                    e.printStackTrace();
	                }
	                synchronized (o2){
	                    System.out.println(Thread.currentThread().getName() + "拿到 o2");//第24行
	                }
	            }
	        }
	        if(flag == 0){
	            synchronized (o2){
	                try {
	                    System.out.println("我是" + Thread.currentThread().getName() + "锁住 o2");
	                    Thread.sleep(3000);
	                    System.out.println(Thread.currentThread().getName() + "醒来->准备获取 o1");
	                }catch (Exception e){
	                    e.printStackTrace();
	                }
	                synchronized (o1){
	                    System.out.println(Thread.currentThread().getName() + "拿到 o1");//第38行
	                }
	            }
	        }
	
	}

	    public static  void main(String args[]){

	        Demo t1 = new Demo();
	        Demo t2 = new Demo();
	        t1.flag = 1;
	        new Thread(t1).start();

	        //让main线程休眠1秒钟,保证t2开启锁住o2.进入死锁
	        try {
	            Thread.sleep(1000);
	        } catch (InterruptedException e) {
	            e.printStackTrace();
	        }

	        t2.flag = 0;
	        new Thread(t2).start();

	    }
}

结果
结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值