- 1 //思索代码
- 2 public class DeadLockDemo implements Runnable {
- 3 4 public int flag = 1;
- 5 //静态对象是类的所有对象共享的
- 6 private static Object o1 = new Object(),
- o2 = new Object();
- 7@Override 8 public void run() {
- 9 System.out.println("flag=" + flag);
- 10
- if (flag == 1) {
- 11 synchronized(o1) {
- 12
- try {
- 13 Thread.sleep(500);
- 14 15
- } catch(Exception e) {
- 16 e.printStackTrace();
- 17
- }
- 18 synchronized(o2) {
- 19 System.out.println("1");
- 20
- }
- 21
- }
- 22
- }
- 23
- if (flag == 0) {
- 24 synchronized(o2) {
- 25
- try {
- 26 Thread.sleep(500);
- 27
- } catch(Exception e) {
- 28 e.printStackTrace();
- 29
- }
- 30 synchronized(o1) {
- 31 System.out.println("0");
- 32
- }
- 33
- }
- 34
- }
- 35
- }
- 36 37 public static void main(String[] args) {
- 38 39 DeadLockDemo td1 = new DeadLockDemo();
- 40 DeadLockDemo td2 = new DeadLockDemo();
- 41 td1.flag = 1;
- 42 td2.flag = 0;
- 43 //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
- 44 //td2的run()可能在td1的run()之前运行
- 45 new Thread(td1).start();
- 46 new Thread(td2).start();
- 47 48
- }
- 49
- }
来源: http://www.bubuko.com/infodetail-2138074.html