From bedcd79ac202a0de7d917286f1f9b534394bbc44 Mon Sep 17 00:00:00 2001 From: Cui YongXing <2835316714@qq.com> Date: Fri, 6 Sep 2024 00:04:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E6=89=BE=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thread/OptimizedPrioritizedThreadPool.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cloud-task-server/src/main/java/com/muyu/task/server/thread/OptimizedPrioritizedThreadPool.java b/cloud-task-server/src/main/java/com/muyu/task/server/thread/OptimizedPrioritizedThreadPool.java index 9c806cb..19c1f8e 100644 --- a/cloud-task-server/src/main/java/com/muyu/task/server/thread/OptimizedPrioritizedThreadPool.java +++ b/cloud-task-server/src/main/java/com/muyu/task/server/thread/OptimizedPrioritizedThreadPool.java @@ -1,9 +1,8 @@ package com.muyu.task.server.thread; -import java.util.HashMap; -import java.util.Map; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; + public class OptimizedPrioritizedThreadPool { private static final ExecutorService executor; @@ -25,6 +24,7 @@ public class OptimizedPrioritizedThreadPool { private static volatile boolean inEmergencyMode = false; public static final AtomicInteger activeEmergencyTasks = new AtomicInteger(0); // 紧急任务计数器 public static final AtomicInteger remainingTasks = new AtomicInteger(0); // 剩余任务计数器 + private static final CountDownLatch emergencyLatch = new CountDownLatch(emergencyThreads); // 用于等待所有紧急任务完成 static { if (defaultHighThreads + defaultMediumThreads + defaultLowThreads > totalThreads) { @@ -53,6 +53,7 @@ public class OptimizedPrioritizedThreadPool { adjustForEmergency(); } remainingTasks.incrementAndGet(); // 增加剩余任务计数 + emergencyLatch.countDown(); // 减少计数器 try { emergencySemaphore.acquire(); executor.submit(() -> { @@ -157,6 +158,14 @@ public class OptimizedPrioritizedThreadPool { // 退出紧急模式 inEmergencyMode = false; + + // 确保所有紧急任务都完成了 + try { + emergencyLatch.await(); // 等待所有紧急任务完成 + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("Interrupted while waiting for emergency tasks to complete."); + } } }