线程死锁的原理
当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。
线程死锁的代码实现
唯一对象锁A
1 2 3 4
| public class LockA { private LockA(){} public static final LockA locka = new LockA(); }
|
唯一对象锁B
1 2 3 4
| public class LockB { private LockB(){} public static final LockB lockb = new LockB(); }
|
死锁代码具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class DeadLock implements Runnable{ private int i = 0; public void run(){ while(true){ if(i%2==0){ synchronized(LockA.locka){ System.out.println("if...locka"); synchronized(LockB.lockb){ System.out.println("if...lockb"); } } }else{ synchronized(LockB.lockb){ System.out.println("else...lockb"); synchronized(LockA.locka){ System.out.println("else...locka"); } } } i++; } } }
|
测试代码
1 2 3 4 5 6 7 8 9
| public class DeadLockDemo { public static void main(String[] args) { DeadLock dead = new DeadLock(); Thread t0 = new Thread(dead); Thread t1 = new Thread(dead); t0.start(); t1.start(); } }
|
如果本文对你有所帮助,请赏我1个铜板买喵粮自己吃,您的支持是我最大的动力!!!
微信支付
支付宝