java中线程是何时死亡的:假如在A线程中启动B线程,那么是不是要等B线程死亡了A线程才会死亡呢?

public class ThreadMain {

/**
* @param args
*/
public static void main(String[] args) {
ThreadDemo.threadStart("test");

}

}

public class ThreadDemo extends Thread{
int a = 10;
int b= 5;
public ThreadDemo(int a,int b){
this.a = a;
this.b = b;

}
public static void threadStart(String string) {
int a =2;
int b = 2 ;
ThreadDemo t1 = new ThreadDemo(a, b);
t1.start();
}

public void run() {

Dao dao = new Dao();
dao.test(a,b);

}

}

public class Dao {

public void test(int a, int b) {

ThreadDemo.threadStart("test");

}

}
以上的例子该怎样理解?

线程的死亡有点小复杂,但也不复杂。
线程A在激活线程B之后,就会多了一个线程。但是两个线程之间的死亡基本上是没有关系的。并不是说必须在B线程死亡之后A线程才会死亡。
造成你有这样的错误认识,可能是两点原因:1.误以为线程A激活线程B的过程和方法A调用方法B的过程差不多;2.A线程在任务完成后并没有立刻死亡;
首先是第一点,线程之间是激活的关系,而不是调用的关系。举个例子来说,一家公司有一个销售部,但是只有一个销售部的话,销售业绩不好。为了更好的出业绩,销售部向公司老总申请成立一个市场部,以便提升业绩。然后老总同意了。但是销售部和市场部属于同级单位而不是上下级单位。不存在谁高谁低。这就是激活,而并非调用;其二,A线程在任务完成后并没有立刻死亡的原因是因为垃圾回收机制。回收器并没有在A线程任务完成后立即将其回收,而是不定时地进行回收,所以就导致了A线程不会在任务完成后立即死亡。(当然也有解决的办法,就是手动调用垃圾回收器,对垃圾线程进行回收。System.gc();)
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-11
代码 弄个输入语句 你去运行一下 不就看出来了
相似回答