A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fengkuangjava 初级黑马   /  2016-3-30 13:41  /  286 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程死锁:在实现多线程时,不要出现锁嵌套的行为,否则会出现线程相互等待的死锁情况。比如以下代码

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);
     }
    }
   }
  }
}
}



2 个回复

倒序浏览
这是程序运行结果,和你想的一样吗

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

捕获.PNG
回复 使用道具 举报
锁嵌套并不一定就会出现死锁,你把static关键字去掉,就不会出现;出现死锁根本原因是因为资源的抢夺
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马