模拟一个简单的游戏任务加载过程

本文通过一个简单的游戏任务加载场景,展示了如何利用Java的线程池、CountDownLatch和Lambda表达式实现并发控制。线程池用于并发执行任务,CountDownLatch作为屏障确保所有任务完成后再继续执行。在任务中,使用了随机数和字符串数组来模拟加载进度,并通过` `回车符在一行内更新进度条。代码示例展示了如何在并发编程中合理使用这些技术。
摘要由CSDN通过智能技术生成

模拟一个简单的游戏任务加载过程

技术要点

  1. 线程池
  2. 随机数
  3. CountDownLatch
  4. Lambda表达式
  5. Arrays
  6. 字符串数组

细节总结

  1. Lambda表达式里面如果想使用外面的值,这个值必须是常量,不能是变量
  2. CountDownLatch相当于一个屏障,等待所有的线程都执行完毕,主线程才开始执行下面内容
    • 主要使用它的两个API
    • countDown() 使我们创建CountDownLatch时候的计数-1
    • await() 等待直到计数为0才放行
  3. 如何使在一行可以重复打印?
    • print(“\r”+…)
    • print可以在一行打印
    • \r可以让新行的打印结果覆盖掉老行

代码展示

package com.Cx_330;

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

public class test03 {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService pool = Executors.newFixedThreadPool(10);
        Random r=new Random();
        String[] all=new String[10];
        CountDownLatch countDownLatch = new CountDownLatch(10);
        for (int j=0;j<10;j++) {
            int k=j;
            pool.submit(()->{
                for (int i = 0; i <= 100; i++) {
                    all[k]=i+"%";
                    try {
                        Thread.sleep(r.nextInt(100));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.print("\r"+Arrays.toString(all));
                    //\r可以让新行的打印结果覆盖掉老行
                    //Lambda表达式只能引用局部的常量,不能引用局部的变量
                }
                countDownLatch.countDown();
            });
        }
        countDownLatch.await();
        System.out.println("\n"+"游戏开始");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_x_330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值