必须通过 join 使得子线程执行结束后再执行主线程中的累加操作,如果子线程没有执行结束,主线程会阻塞等待。学习代码如下:
public class JoinTest {
public static void main(String[] args)throws Exception {
MyRunnable[] mr = new MyRunnable[10];
Thread[] tarr = new Thread[10];
for (int i = 0; i < 10; i++) {
mr[i] = new MyRunnable(i * 10 + 1, (i + 1) * 10);
tarr[i] = new Thread(mr[i]);
tarr[i].start();
}
int res = 0;
for (int i = 0; i < mr.length; i++) {
tarr[i].join();//阻塞当前主线程,等待tarr[i]线程执行结束
res += mr[i].getRes();
}
System.out.println("累加结果为:" + res);
}
public static class MyRunnable implements Runnable {
private int begin;
private int end;
private int res = 0;
public MyRunnable(int begin, int end) {
this.begin = begin;
this.end = end;
}
@Override
public void run() {
for (int i = begin; i <= end; i++)
res += i;
}
public int getRes() {
return res;
}
}
}