Pavel Asked:2020-04-30 11:02:19 +0000 UTC2020-04-30 11:02:19 +0000 UTC 2020-04-30 11:02:19 +0000 UTC 100%导致死锁的代码 772 我需要编写在 100% 的情况下会导致死锁的最简单的代码,但我考虑的所有示例都只给出了一些概率。是否可以这样写,如果可以,最简单的版本会是什么样子? java 2 个回答 Voted Best Answer Komdosh 2020-04-30T12:22:20Z2020-04-30T12:22:20Z public class TestThread { public static Object Lock1 = new Object(); public static Object Lock2 = new Object(); public static void main(String args[]) { ThreadDemo1 T1 = new ThreadDemo1(); ThreadDemo2 T2 = new ThreadDemo2(); T1.start(); T2.start(); } private static class ThreadDemo1 extends Thread { public void run() { synchronized (Lock1) { System.out.println("Thread 1: Holding lock 1..."); try { Thread.sleep(10); } catch (InterruptedException e) {} System.out.println("Thread 1: Waiting for lock 2..."); synchronized (Lock2) { System.out.println("Thread 1: Holding lock 1 & 2..."); } } } } private static class ThreadDemo2 extends Thread { public void run() { synchronized (Lock2) { System.out.println("Thread 2: Holding lock 2..."); try { Thread.sleep(10); } catch (InterruptedException e) {} System.out.println("Thread 2: Waiting for lock 1..."); synchronized (Lock1) { System.out.println("Thread 2: Holding lock 1 & 2..."); } } } } } 资源 VladD 2020-04-30T17:46:43Z2020-04-30T17:46:43Z 最简单的方法可能是从一个在另一个线程中等待自身的同步方法开始。 public synchronized static void deadlock() { try { Thread t = new Thread(Test::deadlock); t.start(); t.join(); } catch (Exception ex) {} } 检查:http: //ideone.com/yTbiKY 一个更短的阻塞代码: new Semaphore(0).acquire(); 但它不是多线程的,因此根据您的观点,它可能是也可能不是死锁。 检查:http: //ideone.com/k1izqy
资源
最简单的方法可能是从一个在另一个线程中等待自身的同步方法开始。
检查:http: //ideone.com/yTbiKY
一个更短的阻塞代码:
但它不是多线程的,因此根据您的观点,它可能是也可能不是死锁。
检查:http: //ideone.com/k1izqy