1. 程式人生 > >java多執行緒之死鎖的例子

java多執行緒之死鎖的例子

在java多執行緒編寫程式中特別害怕的一種情況就是死鎖,他會讓程式死在哪裡不在繼續執行下面就來看一個死鎖的例子:

/**
 * 死鎖的例子
 */
public class SiSuoTest {

    public static void main(String[] args) {
        LineTh ta1 = new LineTh(true);
        LineTh ta2 = new LineTh(false);
        Thread a = new Thread(ta1);
        a.setName("a");//給執行緒起名字為a
        Thread b = new
Thread(ta2); b.setName("b");//給執行緒起名字為b a.start(); b.start(); } } class Luck { public final static Object obj1 = new Object(); public final static Object obj2 = new Object(); } class LineTh implements Runnable { private boolean flag = false; LineTh(boolean
flage) { flag = flage; } public void run() { if (flag) { while (true) { synchronized (Luck.obj1) { System.out.println("執行緒:"+Thread.currentThread().getName()+ ".... 獲取if 的 obj1"); synchronized (Luck.obj2) { System.out.println("執行緒:"
+Thread.currentThread().getName() + ".... 獲取if 的 obj2"); } } } } else { while (true) { synchronized (Luck.obj2) { System.out.println("執行緒:"+Thread.currentThread().getName() + ".... 獲取else 的 obj2"); synchronized (Luck.obj1) { System.out.println("執行緒:"+Thread.currentThread().getName()+ ".... 獲取else 的 obj1"); } } } } } }