/** * 1、業務場景 * 1、定時執行時,可能出現數據量大,執行不完,線程直接被終止掉,丟數據。 */ import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; ...
/**
* 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);
}
}