Java 线程锁死是多线程中的一个典型问题:两个线程相互等待对方释放锁资源,导致线程假死
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public class DeadThread implements Runnable {
private String flag;
private Object lock1 = new Object(); private Object lock2 = new Object();
public void run() { if ("a".equals(flag)) { synchronized (lock1) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println("lock1 调用 lock2"); } } }
if ("b".equals(flag)) { synchronized (lock2) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println("lock2 调用 lock1"); } } } }
public void setFlag(String flag) { this.flag = flag; } }
|
1 2 3 4 5 6 7 8 9 10 11 12
|
public class ThreadRunner {
public static void main(String[] args) { DeadThread deadThread = new DeadThread(); deadThread.setFlag("a"); Thread thread1 = new Thread(deadThread); thread1.start(); deadThread.setFlag("b"); Thread thread2 = new Thread(deadThread); thread2.start(); } }
|
近期评论