寻找报错
parent
18084a5839
commit
1b92668176
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.task.server.service.impl;
|
||||
|
||||
import com.muyu.task.server.thread.OptimizedPrioritizedThreadPool;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
@ -27,7 +28,6 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -277,12 +277,19 @@ public class TaskInfoServiceImpl extends ServiceImpl<TaskInfoMapper, TaskInfo> i
|
|||
if (Weight.urgency.getValue().equals(weight)){
|
||||
log.info("执行紧急任务");
|
||||
// 调整线程分配以适应紧急任务
|
||||
|
||||
OptimizedPrioritizedThreadPool.activeEmergencyTasks.set(0);
|
||||
OptimizedPrioritizedThreadPool.remainingTasks.set(0);
|
||||
for (long i = 1; i <= count; i++) {
|
||||
long pageNum = (i - 1) * PAGE_SIZE;
|
||||
|
||||
submitEmergencyTask(()->{
|
||||
try {
|
||||
getString(pageNum, finalFieName, finalJoint, basicId, newBasicId, tableId, map, num);
|
||||
} finally {
|
||||
// 减少剩余任务计数
|
||||
if (OptimizedPrioritizedThreadPool.remainingTasks.decrementAndGet() == 0) {
|
||||
System.out.println("All emergency tasks have completed.");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
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 {
|
||||
|
@ -21,7 +23,8 @@ public class OptimizedPrioritizedThreadPool {
|
|||
private static final int emergencyLowThreads = 5;
|
||||
|
||||
private static volatile boolean inEmergencyMode = false;
|
||||
private static final AtomicInteger activeEmergencyTasks = new AtomicInteger(0); // 紧急任务计数器
|
||||
public static final AtomicInteger activeEmergencyTasks = new AtomicInteger(0); // 紧急任务计数器
|
||||
public static final AtomicInteger remainingTasks = new AtomicInteger(0); // 剩余任务计数器
|
||||
|
||||
static {
|
||||
if (defaultHighThreads + defaultMediumThreads + defaultLowThreads > totalThreads) {
|
||||
|
@ -45,8 +48,11 @@ public class OptimizedPrioritizedThreadPool {
|
|||
|
||||
public static void submitEmergencyTask(Runnable task) {
|
||||
if (activeEmergencyTasks.incrementAndGet() == 1) {
|
||||
// 初始化计数器
|
||||
remainingTasks.set(0);
|
||||
adjustForEmergency();
|
||||
}
|
||||
remainingTasks.incrementAndGet(); // 增加剩余任务计数
|
||||
try {
|
||||
emergencySemaphore.acquire();
|
||||
executor.submit(() -> {
|
||||
|
@ -54,7 +60,7 @@ public class OptimizedPrioritizedThreadPool {
|
|||
task.run();
|
||||
} finally {
|
||||
emergencySemaphore.release();
|
||||
if (activeEmergencyTasks.decrementAndGet() == 0) {
|
||||
if (remainingTasks.decrementAndGet() == 0) {
|
||||
restoreDefaults();
|
||||
}
|
||||
}
|
||||
|
@ -128,7 +134,7 @@ public class OptimizedPrioritizedThreadPool {
|
|||
}
|
||||
|
||||
public static synchronized void restoreDefaults() {
|
||||
if (inEmergencyMode) {
|
||||
if (inEmergencyMode && remainingTasks.get() == 0) {
|
||||
// 清空紧急任务的许可
|
||||
emergencySemaphore.drainPermits();
|
||||
|
||||
|
|
Loading…
Reference in New Issue