这里申请了1000个线程,并且执行1000次任务。当所有任务完成后,main退出。
public class Test {
public static void main(String[] args) {
int count = 1000;
ExecutorService executorService = Executors.newFixedThreadPool(count);
for (int i = 0; i < count; i++)
executorService.execute(new Test().new Task());
executorService.shutdown();
while (!executorService.isTerminated()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Task implements Runnable {
@Override
public void run() {
try {
// 测试内容
} catch (Exception e) {
e.printStackTrace();
}
}
}
}如果要实现真正的并发同时执行,可通过CyclicBarrier来控制。public class Test {
public static void main(String[] args) {
int count = 1000;
CyclicBarrier cyclicBarrier = new CyclicBarrier(count);
ExecutorService executorService = Executors.newFixedThreadPool(count);
for (int i = 0; i < count; i++)
executorService.execute(new Test().new Task(cyclicBarrier));
executorService.shutdown();
while (!executorService.isTerminated()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Task implements Runnable {
private CyclicBarrier cyclicBarrier;
public Task(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try {
// 等待所有任务准备就绪
cyclicBarrier.await();
// 测试内容
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
本文介绍了一种使用Java实现1000个线程并发执行的方法。通过CyclicBarrier控制所有线程等待,确保所有任务准备就绪后再一起开始执行,实现了真正的并发。文中详细展示了如何创建固定大小的线程池并利用CyclicBarrier进行同步。
927

被折叠的 条评论
为什么被折叠?



