比如在MAIN中开一个线程a,再在这个线程中再开一个线程b(是new一个线程b,b的类定义在a之外),在最后一个线程中用TThread.activeCount()得到的数目还是2(含MAIN的话,应该是3个才对);并且Thread.currentThread()返回的是a线程的名字,而不是b
问题1:请解释下以上 现象
问题2:如何统计全部的线程数(含嵌套)
问题3:嵌套线程的地址空间与他的父线程平级吗?即在main()中是 否可直接利用嵌套进程对象的引用对其进行操作(前提是a线程把b的对象引用传到main中)

解决方案 »

  1.   

    你会得到2是因为 在进入第3个线程后,输出语句前 第二个线程已经结束!class A extends Thread {
    public void run() {
    System.out.println("A" + this.getId());
    B b = new B();
    b.start();
    while (true) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }class B extends Thread {
    public void run() {
    System.out.println("B" + this.getId());
    System.out.println("##########" + Thread.activeCount());
    }
    }你自己回去试试另外:嵌套是可以的,但不知道如果不终止线程,开有没有问题,不敢试
      

  2.   

    试了一下,直接报异常了class A extends Thread {
    public void run() {
    A a = new A();
    a.start();
    while (true) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }
    Exception in thread "Thread-5555" java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Unknown Source)
    at A.run(Test.java:58)
      

  3.   

    [Quote=引用 1 楼 chenchenyangll 的回复:]
    你会得到2是因为 在进入第3个线程后,输出语句前 第二个线程已经结束!
    ---------------------
    你没有完全看明白我的题设:在进入第3个线程b后,输出语句前(位于b中) 线程a并没有结束!因为我用Thread.currentThread()返回的是a线程的名字(a线程我给他自定义了名字的),而不是b线程的名字!