死锁例子

    科技2022-08-06  96

    /** * 必定发生死锁的情况 */ public class MustDeadLock implements Runnable { private final Object lockA; private final Object lockB; public MustDeadLock(Object lockA, Object lockB) { this.lockA = lockA; this.lockB = lockB; } @Override public void run() { System.out.println(Thread.currentThread().getName() + "进入了run方法..."); synchronized (lockA) { try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException ignored) {} System.out.println(Thread.currentThread().getName() + "持有" + lockA + ",尝试获得" + lockB); synchronized (lockB) { System.out.println(Thread.currentThread().getName() + "成功拿到两把锁"); } } } public static void main(String[] args) { Object lockA = new Object(); Object lockB = new Object(); new Thread(new MustDeadLock(lockA, lockB), "AAA").start(); new Thread(new MustDeadLock(lockB, lockA), "BBB").start(); } } /** * 必定发生死锁的情况 */ public class MustDeadLock implements Runnable { static final Object LOCK_A = new Object(); static final Object LOCK_B = new Object(); @Override public void run() { System.out.println(Thread.currentThread().getName() + "进入了run方法..."); if ("A".equals(Thread.currentThread().getName())) { synchronized (LOCK_A) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (LOCK_B) { System.out.println("线程A成功拿到两把锁"); } } } if ("B".equals(Thread.currentThread().getName())) { synchronized (LOCK_B) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (LOCK_A) { System.out.println("线程B成功拿到两把锁"); } } } } public static void main(String[] args) { MustDeadLock run = new MustDeadLock(); Thread t1 = new Thread(run, "A"); Thread t2 = new Thread(run, "B"); t1.start(); t2.start(); } }
    Processed: 0.013, SQL: 8