两个线程,一个线程持有另一个线程运行时的锁,就会死锁
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 |
public class SynchronizedLock{ public
static void main(String[] args) throws
InterruptedException { SynchronizedLockDemo sld = new
SynchronizedLockDemo(); Thread thread0 = new
Thread(sld); Thread thread1 = new
Thread(sld); thread0.start(); Thread.sleep( 1 ); sld.flag = true ; thread1.start(); } } enum Lock{ LOCKA,LOCKB; } class
SynchronizedLockDemo implements
Runnable{ //布尔变量的默认值是false boolean
flag; public
void synLock(){ if (flag){ synchronized (Lock.LOCKA){ System.out.println( "从a到b外层" ); synchronized (Lock.LOCKB){ System.out.println( "从a到b内层" ); } } } else { synchronized (Lock.LOCKB){ System.out.println( "从b到a外层" ); synchronized (Lock.LOCKA){ System.out.println( "从b到a内层" ); } } } } @Override public
void run() { synLock(); } } |
原文:http://www.cnblogs.com/lxricecream/p/3595626.html