- Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请;
- 据说面试喜欢考;
- synchronized在开发中最好不要嵌套使用,容易导致死锁;
-
public class DeadLock { public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); // t1和t2两个线程共享o1,o2 Thread t1 = new MyThread1(o1,o2); Thread t2 = new MyThread2(o1,o2); t1.start(); t2.start(); } } class MyThread1 extends Thread{ Object o1; Object o2; public MyThread1(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } public void run(){ synchronized (o1){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2){ } } } } class MyThread2 extends Thread { Object o1; Object o2; public MyThread2(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } public void run(){ synchronized (o2){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1){ } } } }
- 产生死锁必须具备以下四个条件:【必会】
- 互斥条件:该资源任意一个时刻只由一个线程占用;
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
- 不剥夺条件:线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源;
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系;(比如一个进程集合,A在等B,B在等C,C在等A);
Java死锁代码【代码】【很重点】产生死锁必须具备以下四个条件:【必会】
猜你喜欢
转载自blog.csdn.net/jiayoudangdang/article/details/124154158
今日推荐
周排行