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

publicclassThreadMain{/***@paramargs*/publicstaticvoidmain(String[]args){ThreadDemo.t... 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");

}

}
以上的例子该怎样理解?
展开
 我来答
秦风落
2016-05-11 · 超过80用户采纳过TA的回答
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:87.8万
展开全部
线程的死亡有点小复杂,但也不复杂。
线程A在激活线程B之后,就会多了一个线程。但是两个线程之间的死亡基本上是没有关系的。并不是说必须在B线程死亡之后A线程才会死亡。
造成你有这样的错误认识,可能是两点原因:1.误以为线程A激活线程B的过程和方法A调用方法B的过程差不多;2.A线程在任务完成后并没有立刻死亡;
首先是第一点,线程之间是激活的关系,而不是调用的关系。举个例子来说,一家公司有一个销售部,但是只有一个销售部的话,销售业绩不好。为了更好的出业绩,销售部向公司老总申请成立一个市场部,以便提升业绩。然后老总同意了。但是销售部和市场部属于同级单位而不是上下级单位。不存在谁高谁低。这就是激活,而并非调用;其二,A线程在任务完成后并没有立刻死亡的原因是因为垃圾回收机制。回收器并没有在A线程任务完成后立即将其回收,而是不定时地进行回收,所以就导致了A线程不会在任务完成后立即死亡。(当然也有解决的办法,就是手动调用垃圾回收器,对垃圾线程进行回收。System.gc();)
帅3秒电影解说
2016-05-11 · 超过20用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:27.2万
展开全部
代码 弄个输入语句 你去运行一下 不就看出来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式