黑马程序员技术交流社区

标题: 线程死锁 [打印本页]

作者: fengkuangjava    时间: 2016-3-30 13:41
标题: 线程死锁
线程死锁:在实现多线程时,不要出现锁嵌套的行为,否则会出现线程相互等待的死锁情况。比如以下代码

package work5;
public class text {
/**
  * @param args
  */
public static   Object lock=new Object();
public static Object lock2=new Object();
public static void main(String[] args) {
  Thea thea=new Thea(true);
  Thea thea2=new Thea(false);
  thea.start();
  thea2.start();
}
}


package work5;
public class Thea extends Thread {


private boolean f;
private Thea(){}
public Thea(boolean f){
  this.f=f;
  
}
@Override
public void run() {
  while(true){
   if(f){
    synchronized (text.lock) {
     System.out.println(1);
     synchronized (text.lock2) {
      System.out.println(2);
     }
    }
   }else{
    synchronized (text.lock2) {
     System.out.println(3);
     synchronized (text.lock) {
      System.out.println(4);
     }
    }
   }
  }
}
}




作者: fengkuangjava    时间: 2016-3-30 13:47
这是程序运行结果,和你想的一样吗

捕获.PNG (60.33 KB, 下载次数: 3)

捕获.PNG

作者: onceIme    时间: 2016-3-30 15:06
锁嵌套并不一定就会出现死锁,你把static关键字去掉,就不会出现;出现死锁根本原因是因为资源的抢夺




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2