模拟一个简单的游戏任务加载过程
技术要点
- 线程池
- 随机数
- CountDownLatch
- Lambda表达式
- Arrays
- 字符串数组
细节总结
- Lambda表达式里面如果想使用外面的值,这个值必须是常量,不能是变量
- CountDownLatch相当于一个屏障,等待所有的线程都执行完毕,主线程才开始执行下面内容
- 主要使用它的两个API
- countDown() 使我们创建CountDownLatch时候的计数-1
- await() 等待直到计数为0才放行
- 如何使在一行可以重复打印?
- 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));
}
countDownLatch.countDown();
});
}
countDownLatch.await();
System.out.println("\n"+"游戏开始");
}
}