package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
static volatile ArrayList list7 = new ArrayList<String>();
public static void main(String[] args) throws InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(8);
int count = 5;
final CountDownLatch countDownLatch = new CountDownLatch(count+1);
final List list = list7;
for(int i=0;i<count;++i) {
final int j = i;
service.submit(
()->{
countDownLatch.countDown();
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//System.out.println("准备了");
list.add(j);
System.out.println("结束"+list);
}
);
}
countDownLatch.countDown();
countDownLatch.await();
System.out.println("开始比赛");
service.shutdown();
System.out.println("线程运行结束");
System.out.println(list);
}
}
使用 syclicBarrier 来实现
package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class Main {
static volatile ArrayList list7 = new ArrayList<String>();
final static Object lock = new Object();
public static void main(String[] args) throws InterruptedException {
ExecutorService service = Executors.newFixedThreadPool(8);
int count = 5;
final CyclicBarrier cyclicBarrier = new CyclicBarrier(count);
final List list = list7;
for(int i=0;i<count;++i) {
final int j = i;
service.submit(
()->{
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
//System.out.println("准备了");
synchronized (lock) {
list.add(j);
System.out.println("结束"+list);
}
}
);
}
System.out.println("开始比赛");
Thread.sleep(4*1000);
service.shutdown();
System.out.println("线程运行结束");
System.out.println(list);
}
}