Java线程池ExecutorService和CountDownLatch的小例子

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束。
 * @author liuchao
 *
 */
public class Actor {

    public static void main(String[] args) throws InterruptedException {
        //10名运动员
        final CountDownLatch count = new CountDownLatch(10);
        
        //java的线程池
        final ExecutorService executorService = Executors.newFixedThreadPool(5);
        
        for(int index=1;index<=10;index++){
            final int number = index;
            executorService.submit(new Runnable() {
                public void run() {
                    try {
Thread.sleep((
long) (Math.random()*10000)); System.out.println(number+": arrived"); } catch (InterruptedException e) { e.printStackTrace(); } finally{ //运动员到达终点,count数减一 count.countDown(); } } }); } System.out.println("Game Started"); //等待count数变为0,否则会一直处于等待状态,游戏就没法结束了 count.await(); System.out.println("Game Over"); //关掉线程池 executorService.shutdown(); } }

     运行结果

Game Started
5: arrived
1: arrived
2: arrived
3: arrived
8: arrived
4: arrived
6: arrived
9: arrived
7: arrived
10: arrived
Game Over

相关推荐:

如何在 Tkinter 中安全地将走法计算移至独立线程

本文详解如何通过单例工作线程+队列机制,避免多线程竞争与ui冻结,实现在tkinter棋类游戏中异步执行ai走法计算,同时保障界面响应性与逻辑一致性。 本文详解如何通过单例工作线程+队列机制,避免多线程竞争与ui冻结,实现在tkinter棋类游戏中异步执行ai走法计算,同时保障界面响应性与逻辑一致性...

如何在 GUI 应用中安全地多次启停测量线程

本文介绍如何在长期运行的gui主循环中,通过事件(event)机制灵活控制后台测量线程的启停,避免“线程无法重复启动”问题,实现可反复启用/暂停/终止的可靠多线程测量逻辑。 本文介绍如何在长期运行的gui主循环中,通过事件(event)机制灵活控制后台测量线程的启停,避免“线程无法重复启动”问题,实...

如何在 Tkinter 中安全地将走法计算移至独立线程以避免界面卡顿

本文介绍如何通过单例工作线程+队列机制,将跳棋AI的深度搜索计算(如__predict_optimal_moves)完全剥离出Tkinter主线程,从而彻底解决界面冻结问题,同时避免多线程竞争和重复启动开销。 本文介绍如何通过单例工作线程+队列机制,将跳棋ai的深度搜索计算(如`__predict_...

如何安全地中断 Python 线程(无协作式中断不可行)

python不支持真正意义上的“非协作式线程中断”——即主线程强制终止正在运行的其他线程。所有安全、可靠的线程终止都必须依赖线程自身的配合,例如通过共享标志位、队列信号或超时机制主动退出。 python不支持真正意义上的“非协作式线程中断”——即主线程强制终止正在运行的其他线程。所有安全、可靠的线程...

如何安全地中断或向 Python 线程发送信号(无需线程配合)?

python中无法真正“非协作式”中断正在运行的线程;所有可靠中断机制都依赖线程主动检查退出信号(如标志位、队列指令或超时),这是由gil和运行时设计决定的根本限制。 python中无法真正“非协作式”中断正在运行的线程;所有可靠中断机制都依赖线程主动检查退出信号(如标志位、队列指令或超时),这是由...