package com.hivekion.room.bean; import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.web.reactive.function.client.WebClient; /** * [类的简要说明] *

* [详细描述,可选] *

* * @author LiDongYU * @since 2025/7/22 */ public abstract class AbtParentTask implements TaskAction { //任务数据 protected final ScenarioTask scenarioTask; //房间ID protected final String roomId; //http请求 protected WebClient webClient = WebClient.create(); //线程池 protected ThreadPoolExecutor executor = new ThreadPoolExecutor( 5, // 核心线程数 10, // 最大线程数 60L, // 空闲线程存活时间 TimeUnit.SECONDS, // 时间单位 new LinkedBlockingQueue<>(100), // 任务队列 new CustomThreadFactory("MyPool"), // 线程工厂 new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 ); public AbtParentTask(ScenarioTask scenarioTask, String roomId) { this.scenarioTask = scenarioTask; this.roomId = roomId; } public void addScheduledExecutorServiceRefenceToRoom( ScheduledExecutorService scheduledExecutorService) { RoomManager.addFuture(scheduledExecutorService, this.roomId); } @Override public void doSomeThing() { } @Override public String getId() { return scenarioTask.getId(); } @Override public String getType() { return scenarioTask.getTaskType(); } //获取房间的持续时间 public long getDuringTime() { return RoomManager.getRoomDuringTime(this.roomId); } } // 自定义线程工厂 class CustomThreadFactory implements ThreadFactory { private final AtomicInteger threadNumber = new AtomicInteger(1); private final String namePrefix; public CustomThreadFactory(String namePrefix) { this.namePrefix = namePrefix + "-thread-"; } @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, namePrefix + threadNumber.getAndIncrement()); thread.setDaemon(false); // 设置为非守护线程 thread.setPriority(Thread.NORM_PRIORITY); return thread; } }