问题描述:死锁问题应该是这样发生的。情景:两个人,一个厕所。情节:里面的人办完事了,可是忘了带纸,就给外面的人要纸,外面的人不给,于是乎,出不来;这外面一个人有纸急冲冲的要办事,可是进不去,说里面的人,赶紧出来,可是里面的人没有纸怎么出的来。于是,就这样两个人僵持着。问题的原因在于,里面的人等着外面的人给他纸,外面的人等着里面的人给让位,各自需要的资源被占用了,于是死锁就发生了。
public class DeadLock implements Runnable{ //设置标识符 public int flag = 1; //创建两个Object对象 static Object o1 = new Object(); static Object o2 = new Object(); //重写run方法 public void run (){ System.out.println("flag = "+flag); if(flag == 1){ //当flag的值为1时,锁定o1,睡眠5ooms,然后执行o2 synchronized(o1){ try { Thread.sleep(500); System.out.println("i am o1"); } catch( Exception e) { System.out.println("error!"); } synchronized(o2){ System.out.println("o2"); } } } if(flag == 0 ){ //当flag的值为0时,锁定o2,睡眠5ooms,然后执行o1 synchronized(o2){ try { Thread.sleep(500); System.out.println("i am o2"); } catch( Exception e) { System.out.println("error!"); } synchronized(o1){ System.out.println("o1"); } } } } public static void main(String args[]){ DeadLock dl1 = new DeadLock(); DeadLock dl2 = new DeadLock(); //为各自对象的标识符赋值 dl1.flag = 0; dl2.flag = 1; Thread t1 = new Thread(dl1); Thread t2 = new Thread(dl2); //两个线程启动,各自调用run方法,这样的话各自需要的资源被占用,死锁发生 t1.start(); t2.start(); } }