java for循环内部使用线程
/**
* 1、业务场景
* 1、定时执行时,可能出现数据量大,执行不完,线程直接被终止掉,丢数据。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 1、首先创建线程池,针对线程池开启多个线程。
* 2、for循环开始线程调用。
* 3、线程执行完成终止掉线程。
*/
public class ForLoopMultiThreading {
public static void main(String[] args) {
// 创建一个ExecutorService,用于管理线程
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 创建一个List,用于存储for循环的结果
List<Integer> resultList = new ArrayList<>();
// 定义for循环的起始和结束值
int start = 0;
int end = 100;
// 创建一个for循环,用于计算0到100之间的所有整数
for (int i = start; i <= end; i++) {
// 将for循环的结果添加到List中
resultList.add(i);
// 提交一个任务到ExecutorService中,用于执行for循环的每个迭代
executorService.submit(() -> {
// 在这个线程中执行for循环
for (int j = start; j <= end; j++) {
System.out.println("Thread: " + Thread.currentThread().getName() + ", i: " + i + ", j: " + j);
}
});
}
//慎用:存在数据量大执行不完,直接关闭线程池,数据丢失。 根据业务场景自定义
//如果线程内部报错,直接终止线程。按照定时任务执行的,定时执行五分钟一次。
try {
if (!executorService.awaitTermination(300, TimeUnit.SECONDS)) {
// 如果任务在300秒内仍未完成,强制关闭线程池
executorService.shutdownNow();
}
} catch (InterruptedException e) {
// 捕获异常,并强制关闭线程池
executorService.shutdownNow();
e.printStackTrace();
}
// 关闭ExecutorService
executorService.shutdown();
// 输出for循环的结果
System.out.println("Result List: " + resultList);
}
}