Java死锁代码【代码】【很重点】产生死锁必须具备以下四个条件:【必会】

  • 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){
    				}
    			}
    		}
    }
  • 产生死锁必须具备以下四个条件:【必会】
    1. 互斥条件该资源任意一个时刻只由一个线程占用
    2. 请求与保持条件一个进程因请求资源而阻塞时,对已获得的资源保持不放
    3. 不剥夺条件线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源
    4. 循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系;(比如一个进程集合,A在等B,B在等C,C在等A);

猜你喜欢

转载自blog.csdn.net/jiayoudangdang/article/details/124154158
今日推荐