Java线程死锁

描述

编写程序,实现死锁的情况。

题目

请编写程序,演示一下死锁的情况。

题目解决思路

  1. 分别创建两个锁对象。
  2. 创建两个 线程,分别获取锁对象。

代码具体实现

public class Test { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)\n"); final Object A = new Object(); final Object B = new Object(); new Thread("线程A"){ @Override public void run() { synchronized (A){ System.out.println(Thread.currentThread().getName() + " 获取到 A 锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 等待 B 锁..."); synchronized (B){ System.out.println(Thread.currentThread().getName() + " 获取到 B 锁"); } } } }.start(); new Thread("线程B"){ @Override public void run() { synchronized (B){ System.out.println(getName() + " 获取到 B 锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 等待 A 锁..."); synchronized (A){ System.out.println(Thread.currentThread().getName() + " 获取到 A 锁"); } } } }.start(); } }

运行结果如下图:

23 Java 线程死锁.png

以上案例演示了死锁案例。