java死锁程序
Posted hdc520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java死锁程序相关的知识,希望对你有一定的参考价值。
(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)用普通匿名类创建一个线程
以上是关于java死锁程序的主要内容,如果未能解决你的问题,请参考以下文章