Java實現一個死鎖
有一個藏寶圖(treasureMapFragment)分成兩份jack持有treasureMapFragment1殘片1,json持有殘片2。jack要求必須先看到json的殘圖才給json看自己的殘圖,而json要求必須先看到jack的殘圖才給jack看自己的殘圖。雙方都在請求對方持有的資源但是不釋放自己手里的資源,就形成了死鎖。
package yu;
public class DeadLock {
public static void main(String[] args) {
Object treasureMapFragment1 = new Object();
Object treasureMapFragment2 = new Object();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (treasureMapFragment1) {
String name = Thread.currentThread().getName();
System.out.println(name + "持有藏寶圖碎片1");
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (treasureMapFragment2) {
System.out.println(name + "同時也獲得了藏寶圖碎片2");
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (treasureMapFragment2) {
String name = Thread.currentThread().getName();
System.out.println(name + "持有藏寶圖碎片2");
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (treasureMapFragment1) {
System.out.println(name + "同時也獲得了藏寶圖碎片1");
}
}
}
});
t1.setName("jack");
t2.setName("json");
t1.start();
t2.start();
}
}