多线程死锁现象

package demo.thread;

class DeadLock1 extends Thread {
    DeadLock1(String name) {
        super(name);
    }

    public void run() {
        if ("f".equals(getName())) {
            synchronized ("遥控器") {
                System.out.println(getName() + "拿到了遥控器");
                synchronized ("电池") {
                    System.out.println(getName() + "拿到了电池和遥控器,开着空调爽歪歪");
                }
            }
        } else if ("m".equals(getName())) {
            synchronized ("电池") {
                System.out.println(getName() + "拿到了电池");
                synchronized ("遥控器") {
                    System.out.println(getName() + "拿到了电池和遥控器,开着空调爽歪歪");
                }
            }
        }
    }
}

class DeadLock2 implements Runnable {
    Object obj = new Object();
    private int num = 100;

    public void run() {
        if ("a".equals(Thread.currentThread().getName()))
            while (true) {
                synchronized (obj) {        //a进来锁上obj                    1
                    show();                //a进不去this的锁(非静态方法的锁是this)       3
                }
            }
        else if ("b".equals(Thread.currentThread().getName()))
            while (true)
                this.show();
    }

    private synchronized void show() {
        //b进来锁上this                                                     2
        synchronized (obj) {          //b进不去obj的锁                           4
            if (num > 0) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                }
                System.out.println(Thread.currentThread().getName() + ".....sale...." + num--);
            }
        }
    }
}

class DeadLockTest {
    public static void main(String[] args) {
        DeadLock1 f = new DeadLock1("f");
        DeadLock1 m = new DeadLock1("m");
         f.start();
        m.start();

        DeadLock2 d = new DeadLock2();
        Thread a = new Thread(d, "a");
        Thread b = new Thread(d, "b");
        a.start();
        b.start();
    }
}
/*死锁现象出现 的根本原因:
	1. 存在两个或者两个以上的线程。
	2. 存在两个或者两个以上的共享资源。*/

f拿到了遥控器
f拿到了电池和遥控器,开着空调爽歪歪
m拿到了电池
m拿到了电池和遥控器,开着空调爽歪歪
a…sale…100
a…sale…99
a…sale…98
a…sale…97
a…sale…96
a…sale…95
a…sale…94
a…sale…93
a…sale…92
a…sale…91
a…sale…90
a…sale…89
a…sale…88
a…sale…87
a…sale…86
a…sale…85
a…sale…84
a…sale…83
a…sale…82
a…sale…81
a…sale…80
a…sale…79
a…sale…78
a…sale…77
a…sale…76
a…sale…75
a…sale…74
a…sale…73
a…sale…72
a…sale…71
a…sale…70
a…sale…69
a…sale…68
a…sale…67
a…sale…66
a…sale…65
a…sale…64
a…sale…63
a…sale…62
a…sale…61
a…sale…60
a…sale…59
a…sale…58
a…sale…57
a…sale…56
a…sale…55
a…sale…54
a…sale…53
a…sale…52
a…sale…51
a…sale…50
a…sale…49
a…sale…48
a…sale…47
a…sale…46
a…sale…45
a…sale…44
a…sale…43
a…sale…42
a…sale…41
a…sale…40
a…sale…39
a…sale…38
a…sale…37
a…sale…36
a…sale…35
a…sale…34
a…sale…33
a…sale…32
a…sale…31
a…sale…30
a…sale…29
a…sale…28
a…sale…27
a…sale…26
a…sale…25
a…sale…24
a…sale…23
a…sale…22
a…sale…21
a…sale…20
a…sale…19
a…sale…18
a…sale…17
a…sale…16
a…sale…15
a…sale…14
a…sale…13
a…sale…12
a…sale…11
a…sale…10
a…sale…9
a…sale…8
a…sale…7
a…sale…6
a…sale…5
a…sale…4
a…sale…3
a…sale…2
a…sale…1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值