package com.wkcto.intrinsiclock;
/**
* 死鎖
* 在多線程程序中,同步時可能需要使用多個鎖,如果獲得鎖的順序不一致,可能會導致死鎖
* 如何避免死鎖?
* 當需要獲得多個鎖時,所有線程獲得鎖的順序保持一致即可
* Author: 老崔
*/
public class Test10 {
public static void main(String[] args) {
SubThread t1 = new SubThread();
t1.setName("a");
t1.start();
SubThread t2 = new SubThread();
t2.setName("b");
t2.start();
}
static class SubThread extends Thread{
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
@Override
public void run() {
if ("a".equals(Thread.currentThread().getName())){
synchronized (lock1){
System.out.println("a線程獲得了lock1鎖,還需要獲得lock2鎖");
synchronized (lock2){
System.out.println("a線程獲得lock1后又獲得了lock2,可以想干任何想干的事");
}
}
}
if ("b".equals(Thread.currentThread().getName())){
synchronized (lock2){
System.out.println("b線程獲得了lock2鎖,還需要獲得lock1鎖");
synchronized (lock1){
System.out.println("b 線程獲得lock2后又獲得了lock1,可以想干任何想干的事");
}
}
}
}
}
}