2020年9月12日 執行緒死鎖現象
阿新 • • 發佈:2020-09-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,兩個執行緒處於僵持狀態互相不能執行下去,
這個現象就是死鎖狀態。