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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© littlefoxtail 中级黑马   /  2013-5-13 14:29  /  1139 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 littlefoxtail 于 2013-5-13 16:10 编辑


  1. class House{
  2.         
  3. }

  4. class Man extends Thread{
  5.         
  6.         House h;
  7.         public Man(House h){
  8.                 this.h = h;
  9.         }
  10.         public void run() {
  11.                 synchronized (h) {
  12.                         System.out.println("买房子");
  13.                 }
  14.         }
  15. }

  16. public class DeadLockDemo {
  17.         public static void main(String[] args) {
  18.                
  19.                 House  h = new House();
  20.                 Man m = new Man(h);
  21.                 m.start();
  22.                
  23.                 synchronized (h) {
  24.                         try {
  25.                                 m.join();
  26.                         } catch (InterruptedException e) {
  27.                                 e.printStackTrace();
  28.                         }
  29.                         System.out.println("end");
  30.                 }
  31.         }
  32. }
复制代码
这个死锁程序对么,有没有可能先执行run方法,再执行主函数

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

2 个回复

倒序浏览
是一个死锁程序。因为当主函数执行到join的时候会暂停执行,直至m的run方法执行结束。
但是此时主函数把锁h拿着未释放,所以run方法也执行不了。这样两个线程都进行不下去了,就死锁了。
不可能先执行run方法再执行主函数,因为主函数是一个程序的入口,只有从主函数开始执行代码的。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
谢谢,解释的很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马