线程阻塞join();是怎么回事

Aring123 2019-06-22 01:43:29
public class SumRunnableDemo implements Runnable {
private int num1;
private int num2;
private long sum;

public SumRunnableDemo(int x,int y) {//有参构造方法
this.num1=x;
this.num2=y;
System.out.println(num1+"到"+num2+"的求和是:");
}

long sum() {//返回求和值
return this.sum;
}

public void run() {
for (int i = num1; i < num2; i++) {
this.sum+=i;
}
}

public static void main(String[] args) {
SumRunnableDemo srd=new SumRunnableDemo(1,100);
Thread thread=new Thread(srd);
thread.start();
// try {
// thread.join();
// } catch (Exception e) {
// e.printStackTrace();
// }
System.out.println(srd.sum());
}
}


请问一下大神为什么不加thread.join();结果是0
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_long_guo 2019-06-22
  • 打赏
  • 举报
回复
看错了,你的问题看下源码就很清楚了,join是synchronized.在里面线程会有个死循环,跳出的条件之一是isalive为false.如果不是就wait(0)
xiao_long_guo 2019-06-22
  • 打赏
  • 举报
回复
在sum 前加上volatile.
心怀啊 2019-06-22
  • 打赏
  • 举报
回复
join的作用是暂停主线程,使子线程执行完毕后接着执行主线程

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧