黑马程序员技术交流社区

标题: 什么这两个代码,产生的线程的名字不同 [打印本页]

作者: 刘海陆    时间: 2013-5-14 20:03
标题: 什么这两个代码,产生的线程的名字不同
本帖最后由 刘海陆 于 2013-5-19 12:56 编辑

代码A :
package cn.itcast;
public class ThreadCreateTest {
/**
  * @param args
  */
public static void main(String[] args) throws Exception{

  System.out.println("main strat");
  
    new Thread(new Thread(){
   @Override
   public void run(){
    while (true) {
     System.out.println(Thread.currentThread().getName());
     System.out.println(this.getName());
     try {
      Thread.sleep(500);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     
    }
   }
  }).start();
  
  System.out.println("main end");
}
}


代码 B::
package cn.itcast;
public class ThreadCreateTest {
/**
  * @param args
  */
public static void main(String[] args) throws Exception{

  System.out.println("main strat");
  
  Thread thread = new Thread(){
   @Override
   public void run()  {
    // TODO Auto-generated method stub
    while(true){
     System.out.println(Thread.currentThread().getName());
     System.out.println(this.getName());
     try {
      Thread.sleep(1000);
     } catch (Exception e) {
      // TODO: handle exception
     }
    }
   }
   
  };
  thread.start();
  
  
  System.out.println("main end");
}
}


代码A 运行的结果是 thread1 thread0 两个线程的名字
代码B 运行的结果是 只有 thread0 一个线程的名字

没想明白,为什么代码A运行的时候,会产生两个线程呢,求解,想了好久也没想明白,求解

作者: xuemeng    时间: 2013-5-14 21:20
因为你的A 开启了两个线程啊  
你的B就开启了一个线程, 其实你看看你的A 有两个new ,那就是两个对象
你的B, 就new了一个对象, 然后用这个对象的引用开启线程, 当然就只有一个线程了

当然, 这里我没算主线程
作者: 刘海陆    时间: 2013-5-15 20:45
嗯,明白了,谢谢哈
作者: 袁梦希    时间: 2013-5-18 12:48
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分类进行改正。{:soso_e163:}




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