zoukankan      html  css  js  c++  java
  • 死锁的实例

    死锁的实例

    package day11_second;
    
    public class DeathLock {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		DeathLocked1 dl1 = new DeathLocked1();
    		DeathLocked2 dl2 = new DeathLocked2();
    		Thread t1 = new Thread(dl1);
    		Thread t2 = new Thread(dl2);
    		t1.start();
    		t2.start();
    	}
    
    }
    
    
    class Res {
    	
    	public static Object obj1 = new Object();
    	public static Object obj2 = new Object();
    }
    
    class DeathLocked1 implements Runnable{
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		fun();
    	}
    
    	private void fun() {
    		// TODO Auto-generated method stub
    		synchronized (Res.obj1) {
    			try {Thread.sleep(1000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			synchronized (Res.obj2) {
    				System.out.println("在obj1中调用obj2");
    			}
    		}
    	}
    	
    }
    
    
    class DeathLocked2 implements Runnable{
    
    	@Override
    	public void run() {
    		// TODO Auto-generated method stub
    		fun();
    	}
    
    	private void fun() {
    		// TODO Auto-generated method stub
    		synchronized (Res.obj2) {
    			try {Thread.sleep(1000);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    			synchronized (Res.obj1) {
    				System.out.println("在obj2中调用obj1");
    			}
    		}
    	}
    	
    }
    

      当启动线程t1后,执行t1的fun方法,占用o1资源,然后t1休眠确保能够让t2来执行。t2执行fun()方法,占有o2资源。此时就形成了死锁产生的第四个必要条件。即线程t1占有了t2所需的资源,t2占有了t1所需的资源,双方都不释放,即形成死锁。

          http://my.oschina.net/u/1469592/blog/208374

  • 相关阅读:
    影响指令流水线的因素
    硬布线控制器和微程序控制器 
    总线仲裁
    计算机专业面试
    P、NP、NPC、NPH问题的区别和联系
    多态
    软件生命周期
    你所不知道的js的小知识点(1)
    html span标签 不换行(有时span带中文时候是可以自动换行的)
    form的onsubmit事件--表单提交前的验证最佳实现方式
  • 原文地址:https://www.cnblogs.com/childhooding/p/4741698.html
Copyright © 2011-2022 走看看