package com.ron.java.test01;
import java.util.Random;
public class Test {
/**
* 输入课程总时长
*
* 5-20分钟不定时一次人脸识别,只上传一次,总次数为总共时长/15
*
* 输出每次人脸识别的时间,并标记是否上传
*
* @param totalTime
*/
public static int getUploadTime(int totalTime) {
// 间隔时间15分钟,在此区间取随机值,加上固定5分钟,就是间隔5~20分钟
int interval = 15 * 60;
// 总共会识别的次数
int sum = totalTime / interval;
// 随机获取哪次上传到服务器
int upload = new Random().nextInt(sum);
// 人脸识别时间
int recognizeTime = 0;
int uploadTime = -1;
for (int i = 0; i < sum; i++) {
int temp = 5 * 60 + new Random().nextInt(interval);
// 如果最后不足5分钟了,不再识别,最后一次识别上传
if (totalTime - recognizeTime < 300) {
return recognizeTime;
}
// 如果本次时间的时间可能超出总时长,以剩余时间取下次间隔时间
else if (totalTime - recognizeTime < 1200 && totalTime - recognizeTime > 300) {
temp = 5 * 60 + new Random().nextInt(totalTime - recognizeTime - 300);
}
// 每次的识别时间
recognizeTime = recognizeTime + temp;
// 判断当前是否会上传
boolean isUpload = i == upload;
if (isUpload) {
uploadTime = recognizeTime;
}
// System.out.println("第" + (i + 1) + "次识别时间为:" + recognizeTime + ",距离上次识别时间为:" + temp + ",是否上传:" + isUpload);
}
return uploadTime;
}
public static void concurrent() {
// 假设课程时长为70分钟
int totalTime = 70 * 60;
// 记录并发次数
int[] result = new int[totalTime];
// 假设10000个人同时开始学习,求并发最大值
for (int i = 0; i < 10000; i++) {
// 获取当前这个人上传人脸识别图片的时间
int temp = getUploadTime(totalTime);
// 记录并发数
result[temp] = result[temp] + 1;
}
// 最大并发数
int maxConcurrentCount = 0;
// 最大并发数所在的时间
int maxConcurrentTime = 0;
// 验证是不是总共1000次
int test = 0;
for (int i = 0; i < result.length; i++) {
test = test + result[i];
if (maxConcurrentCount < result[i]) {
maxConcurrentCount = result[i];
maxConcurrentTime = i;
}
}
System.out.println("最大并发数: " + maxConcurrentCount + " 最大并发数的时间: " + maxConcurrentTime);
// System.out.println(test);
// 对并发数进行排序(默认是顺序排序)
// Arrays.sort(result);
//
//
//
输出并发最高的前10
// for (int i = result.length - 1; i > result.length - 10; i--) {
// System.out.println(result[i]);
// }
}
public static void main(String[] args) {
// 测试1000次
for (int i = 0; i < 1000; i++) {
concurrent();
}
}
}
模拟求最大并发数
于 2022-03-19 02:36:35 首次发布