在Java編程中,死鎖和死循環是兩個常見的問題,它們會導致程序無法正常執行。下面我們分別來介紹一下死鎖和死循環。
死鎖:
public class Deadlock{ private static Object lock1 = new Object(); private static Object lock2 = new Object(); public static void main(String[] args){ new Thread(){ public void run(){ synchronized(lock1){ System.out.println("Thread 1 acquired lock 1"); try{ Thread.sleep(100); }catch(Exception e){} System.out.println("Thread 1 waiting for lock 2"); synchronized(lock2){ System.out.println("Thread 1 acquired lock 2"); } } } }.start(); new Thread(){ public void run(){ synchronized(lock2){ System.out.println("Thread 2 acquired lock 2"); try{ Thread.sleep(100); }catch(Exception e){} System.out.println("Thread 2 waiting for lock 1"); synchronized(lock1){ System.out.println("Thread 2 acquired lock 1"); } } } }.start(); } }
在上面的代碼中,我們創建了兩個線程,每個線程都嘗試獲取兩個鎖。同時,線程1先獲取鎖1,然后在等待獲取鎖2。線程2則先獲取鎖2,然后在等待獲取鎖1。這樣就會導致死鎖的產生。
死循環:
public class InfiniteLoop{ public static void main(String[] args){ int num = 0; while(num< 10){ System.out.println("This loop will never stop!"); num--; } } }
在上面的代碼中,我們使用了一個while循環,不過我們在循環中每次減去1,這樣會導致num永遠小于10,因此循環永遠不會停止。