给定一个int数组,假设有10000个长度,里面放满1-100的随机整数。用Executors框架实现查找并输出该数组中50的出现个数,同时显示出程序开始和结束的时间
时间: 2024-05-09 11:21:38 浏览: 72
利用随机函数产生30000个随机整数进行排序,并统计每一种排序上机所花费的时间
5星 · 资源好评率100%
```
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 生成随机数组
int[] arr = new int[10000];
Random random = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100) + 1;
}
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
// 开始时间
long start = System.currentTimeMillis();
// 提交任务
for (int i = 0; i < 10; i++) {
int finalI = i;
executorService.submit(() -> {
int count = 0;
for (int j = finalI * 1000; j < (finalI + 1) * 1000; j++) {
if (arr[j] == 50) {
count++;
}
}
System.out.println("线程" + Thread.currentThread().getName() + "中50的数量为:" + count);
});
}
// 关闭线程池
executorService.shutdown();
try {
// 等待所有任务完成
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
// 结束时间
long end = System.currentTimeMillis();
System.out.println("50在数组中出现的总次数为:" + count(arr) + ",共用时:" + (end - start) + "毫秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static int count(int[] arr) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 50) {
count++;
}
}
return count;
}
}
```
代码说明:
1. 首先生成一个长度为10000的随机数组。
2. 创建一个固定大小的线程池,大小为10。
3. 提交任务,将数组分成10份,每个线程负责处理其中一份。遍历数组,统计50出现的次数,并输出。
4. 关闭线程池,等待所有任务完成。
5. 计算50在整个数组中出现的次数,并输出程序运行时间。
阅读全文