1. 程式人生 > 實用技巧 >2020年9月12日 執行緒死鎖現象

2020年9月12日 執行緒死鎖現象

package com.atguigu.test13;
/*
 * 死鎖:
 *   兩個執行緒,互相持有,佔有對方想要的鎖,不放手。
 */
public class TestDeadLock {
    public static void main(String[] args) {
        Object g = new Object();
        Object m = new Object();
        
        Boy b = new Boy(g,m);
        Bang bang = new Bang(g,m);
        
        b.start();
        bang.start();
    }
}
//男朋友 class Boy extends Thread{ private Object girl; private Object money; public Boy(Object girl, Object money) { super(); this.girl = girl; this.money = money; } public void run(){ synchronized (money) { System.out.println("你放了我女朋友,我給你500萬");
synchronized (girl) { System.out.println("給了對方500萬"); } } } } //綁匪 class Bang extends Thread{ private Object girl; private Object money; public Bang(Object girl, Object money) { super(); this.girl = girl; this.money = money; }
public void run(){ synchronized (girl) { System.out.println("你給我500萬,我放了你女朋友"); synchronized (money) { System.out.println("放人"); } } } }

如上兩個執行緒都是同步的同一個屬性girl和money,只是同步的順序不一樣,當執行緒一同步了money而此時執行緒二同步了girl,兩個執行緒處於僵持狀態互相不能執行下去,

這個現象就是死鎖狀態。