比如在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:嵌套线程的地址空间与他的父线程平级吗?即在main()中是 否可直接利用嵌套进程对象的引用对其进行操作(前提是a线程把b的对象引用传到main中)
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());
}
}你自己回去试试另外:嵌套是可以的,但不知道如果不终止线程,开有没有问题,不敢试
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)
你会得到2是因为 在进入第3个线程后,输出语句前 第二个线程已经结束!
---------------------
你没有完全看明白我的题设:在进入第3个线程b后,输出语句前(位于b中) 线程a并没有结束!因为我用Thread.currentThread()返回的是a线程的名字(a线程我给他自定义了名字的),而不是b线程的名字!