在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,因此循环永远不会停止。