标签:deadlock 释放 获取 rac 死锁 资源 static nts 创建
(1)死锁案例
/** * 一个简单的死锁类 * main方法中启动两个线程,分别调用methodA和methodB方法 * methodA方法首先获取到a对象的锁,睡眠1秒钟 * 此时methodB方法执行获取到b对象的锁,睡眠1秒 * 此时methodA需要去获取b对象的锁才能继续执行,但是b锁没有被释放无法获取到 * 此时methodB需要去获取a对象的锁才能继续执行,但是a锁没有被释放无法获取到 * 从而两者相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。 */ public class DeadLock { private static String a = "1"; private static String b = "2"; public void methodA() { synchronized (a) { System.out.println("我是A方法中获得到了A锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (b) { System.out.println("我是A方法中获取到b锁"); } } } public void methodB() { synchronized (b) { System.out.println("我是B方法中获得到了b锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (a) { System.out.println("我是B方法中获取到a锁"); } } } public static void main(String[] args) { new Thread(() -> { d.methodA(); }).start(); new Thread(() -> { d.methodB(); }).start(); // new Thread(new Runnable() { // @Override // public void run() { // d.methodB(); // } // }).start(); } }
(2)用普通匿名类创建一个线程
标签:deadlock 释放 获取 rac 死锁 资源 static nts 创建
原文地址:https://www.cnblogs.com/hdc520/p/12811033.html