随笔-4  评论-15  文章-0  trackbacks-0

此时程序中最多有几个存活的线程,个人认为应该是4个,怎么就是看不到是4个的结果呢?
package Test;

public class Testthread{
     public static void main(String[] args){

      //测定当前活动的线程数目 肯定有一个主线程在运行
      System.out.println("=========header========"+Thread.activeCount());
      ThreadTest tt=new ThreadTest();  
      RunTest rt=new RunTest();
//在下面新建线程里被启动

      new Thread(rt).start();      //新建立的一个线程 启动
      tt.start();                        //已经建立的线程 启动
      System.out.println("===========footer======"+Thread.activeCount());
 }
}
class ThreadTest extends Thread{
 public void run(){
  System.out.println("==========I'm over thread=========");
 }
}

class RunTest implements Runnable{
 public void run(){
  System.out.println("==========I'm over runnable==========");
 }
}


打印结果:
第一类结果 (次序有时不同)
=========header========1
===========footer======3
==========I'm over thread=========
==========I'm over runnable==========

第二类结果
=========header========1
==========I'm over runnable==========
===========footer======2
==========I'm over thread=========


posted on 2009-04-24 15:04 王业平 阅读(1145) 评论(6)  编辑  收藏

评论:
# re: 关于多线程的问题 高手指点 2009-04-24 15:47 | shivaree
footer 和 header 是main线程 , over thread 和 over runnable是支线程, 三个啊。   回复  更多评论
  
# re: 关于多线程的问题 高手指点 2009-04-24 16:07 | 5452
类运行时,main函数是入口,所以运行时,首先是建立了一个属于main的线程,然后才是new Thread(rt).start(); tt.start(); 的运行,也就是说此时最多有三个线程。楼主的四个线程是怎么想的我不知道。   回复  更多评论
  
# re: 关于多线程的问题 高手指点 2009-04-24 16:14 | 王业平
RunTest 不还是一个线程吗?
==========I'm over runnable==========
不就是它打印的结果吗,我用蓝色字体标明了的  回复  更多评论
  
# re: 关于多线程的问题 高手指点[未登录] 2009-04-24 16:41 | smile
RunTest rt=new RunTest();
new Thread(rt).start();

上面启动的是一个线程,实现了Runnable但是不放到线程里面执行是不会产生新的线程的。  回复  更多评论
  
# re: 关于多线程的问题 高手指点 2009-04-24 16:49 | 王业平
rt 不是已经放到线程里面了吗
说明白点吧  回复  更多评论
  
# re: 关于多线程的问题 高手指点 2009-06-18 08:08 | zeaster
//此处不会启动新线程,因为RunTest只是个Runnable,不是Thread
RunTest rt=new RunTest();

// 此处会启动一个线程,这个线程使用实现Runnable接口的rt
new Thread(rt).start();

所以上面2行,只启动一个线程
程序里一共3个
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: