以下代码输出如下。为什么,主线程return早已结束,子线程还不结束吗?我是老师,现在的和:1
我是学生,现在的和:2
我是老师,现在的和:3
我是学生,现在的和:4
我是老师,现在的和:5
我是学生,现在的和:6
我是老师,现在的和:7
我是学生,现在的和:8
我是老师,现在的和:9
我是学生,现在的和:10public class Example9_2 {
public static void main(String args[]) {
ComputerSum sum = new ComputerSum();
People left = new People("老师", 1000, sum);
People right = new People("学生", 1000, sum);
left.start();
right.start();
return;
}
}class ComputerSum {
int sum;
public void setSum(int n) {
sum = n;
}
public int getSum() {
return sum;
}
}class People extends Thread {
int timeLength; //线程休眠的时间长度
ComputerSum sum;
People(String s, int timeLength, ComputerSum sum) {
setName(s); //调用Thread类的方法setName为线程起个名字
this.timeLength = timeLength;
this.sum = sum;
}
@Override
public void run() {
for (int i=1; i<=5; i++) {
int m = sum.getSum();
sum.setSum(m + 1);
System.out.println("我是" + getName() + ",现在的和:" + sum.getSum());
try {
sleep(timeLength);
}
catch (InterruptedException e) {
}
}
}
}
我是学生,现在的和:2
我是老师,现在的和:3
我是学生,现在的和:4
我是老师,现在的和:5
我是学生,现在的和:6
我是老师,现在的和:7
我是学生,现在的和:8
我是老师,现在的和:9
我是学生,现在的和:10public class Example9_2 {
public static void main(String args[]) {
ComputerSum sum = new ComputerSum();
People left = new People("老师", 1000, sum);
People right = new People("学生", 1000, sum);
left.start();
right.start();
return;
}
}class ComputerSum {
int sum;
public void setSum(int n) {
sum = n;
}
public int getSum() {
return sum;
}
}class People extends Thread {
int timeLength; //线程休眠的时间长度
ComputerSum sum;
People(String s, int timeLength, ComputerSum sum) {
setName(s); //调用Thread类的方法setName为线程起个名字
this.timeLength = timeLength;
this.sum = sum;
}
@Override
public void run() {
for (int i=1; i<=5; i++) {
int m = sum.getSum();
sum.setSum(m + 1);
System.out.println("我是" + getName() + ",现在的和:" + sum.getSum());
try {
sleep(timeLength);
}
catch (InterruptedException e) {
}
}
}
}
并非他们要同时结束 比如有的时候 子线程遇到阻塞 或者需要认为的休眠 这个时候main线程还在。
或者说,它们和程序开始起始线程(调用main方法的线程)是并列关系。只是,它们是由起始线程调用启动的而已。启动之后,它们三个就没有关系了。
这理论谁教你的?
所以,在main中起了线程,需要join一把 等其他线程返回后main最后退出。
请问你一下 没有main线程 其他的线程能自动运行起来么?你有理论就说出来让大家学习学习 别就一句话 还以为你好大水平呢 有点砸人...
我先声明一点 main线程结束 子线程也就不存在了 是错的 ...
2.main所在的线程结束,demon线程是否退出也和它没有任何关系,而是看整个jvm进程内是否还有非
demon线程,如果没有,整个jvm进程退出。换句话说jvm只要发现不再有非demon线程就退出,main线程是否退出没有任何关系。所以说上面两个完全胡说八道,而且我说他们胡说八道,也不是非要说明理由,如果有人说1+1=10我要说明理由说他们胡说八道吗。
对于你的回复 我表示压力很大!首先我不是在教导别人 我只是在说出我个人的观点 如果错了 大家可以相互探讨 这本来就是一个相互探讨的平台 你愤怒我做什么呢?
其次我感觉你真的 N X 你肯定一向都是很N X的人 从来不说错话 做错事 了不起...
在我最初学习java的时候,我得引路人告诉我,可以去csdn上提些问题,但是自己必须具备分辨正确和错误回复能力,现在自己在这方面略懂一二了,只是想让那些初学者能够学到正确的东西少走弯路,这是我得出发点!
我再次强调我之所以愤怒的根本是 我在csdn上见过太多错误的不负责任的回复 我不是针对你 只是针对这种现象而愤怒 所有人都负起责任 这个论坛才有价值 。我承认我得 第一句回复 “。。理论谁教你的”这话的确不妥 可以换种方式来说 也许你会接受 只是因为见到太多不负责任的回复 才会这样 为此我表示歉意 希望今后你和所有人都能负起自己的责任 把好东西留在论坛 我只是一个路人 一个工作休息时上来 逛下的人 我只是对自己负责!
http://topic.csdn.net/u/20110506/16/94776d9f-5d8f-4964-affe-34830fd22962.html
你才傻X .好好想想你的比喻吧 你说别人在瞎说 你就没瞎说 我也不想在这个问题上纠结了
只想告诉你 不要针对那一个人发表不满 毕竟我们还没那么熟 所以你还没那个特权 特别是过分那种 这样你到是没什么... 人与人之间要相互尊重 大家都是求学的 你能说你有好NB
?