要求主线程执行在子线程执行之后。
这个很好办,子线程都设为不是守护线程
然后处理4个子线程
我们可以让每个线程向如下
static class MyThread {
public static void start(int begin, int step){
Thread t = new Thread(()->{
int localSum = 0;
for (int i = begin;i<=100;i+=step){
localSum+=i;
}
});
t.setDaemon(false);
t.start();
}
}
}
在建立一个阻塞队列,存每个任务块的结果
private static final LinkedBlockingQueue<Integer> queue =
new LinkedBlockingQueue<>(10);
将子线程执行结果放入阻塞队列
queue.offer(localSum);
使用并发包的原子类对结果进行累加
private static final AtomicInteger sum = new AtomicInteger(0);
public static void test3()throws InterruptedException{
int sum = 0;
Lock lock = new ReentrantLock();
AtomicInteger count = new AtomicInteger(0);
for(int i = 0 ; ;i++){
MyThread.start(i,4);
count.getAndIncrement();
if(i==4){
break;
}
}
while(count.decrementAndGet()>0){
Integer integer = null;
while(queue.size()<=0){
Thread.sleep(0);
}
lock.lock();
integer = queue.take();
lock.unlock();
sum+=Integer.valueOf(integer);
}
System.out.println(sum);
}
这样就能可以解决问题
完整代码