Class AsyncExecutor
java.lang.Object
tech.riemann.nif.support.tiangong.servlet.async.AsyncExecutor
Servlet 异步请求的工作池与超时调度器,由容器统一装配、统一关闭。
历史实现在 AsyncContextImpl 中以 static final 字段直接创建
Executors.newCachedThreadPool():线程数无界、生命周期不可关闭、溢出无拒绝策略。现改为:
- 工作线程委托给
WorkerExecutor,沿用server.tiangong.async-worker-threads与prefer-virtual-threads配置,等待队列有界(async-queue-capacity); - 队列打满时
execute(Runnable)返回false,由调用方把异步请求按错误路径结束,而不是无限堆积; TiangongWebServer启动时configure(WorkerExecutor)注入, 停止时shutdown()取消未触发的超时任务并进入关闭态;工作池本身由容器负责关闭。
未装配时(例如脱离容器的单元测试)会惰性创建一套有界的默认池,行为与装配后一致。进入关闭态后
execute(Runnable) 一律返回 false、schedule(Runnable, long) 返回 null,不再新建线程。
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int未显式配置时的最大工作线程数(虚拟线程可用时该值不生效)。static final int未显式配置时的等待队列容量。static final String默认线程名前缀。 -
Method Summary
Modifier and TypeMethodDescriptionstatic voidconfigure(WorkerExecutor worker) 注入容器配置好的工作池并解除关闭态;原先由本类创建且仍存活的默认池会被关闭。static boolean提交异步任务。static booleanisClosed()static booleanstatic voidreset()归还到「未装配」状态,供测试隔离使用。static ScheduledFuture<?> 注册一个延迟任务(用于AsyncContext超时回调)。static voidshutdown()进入关闭态:取消未触发的超时任务,并释放由本类创建的默认工作池。static WorkerExecutorworker()
-
Field Details
-
DEFAULT_THREAD_NAME_PREFIX
-
DEFAULT_MAX_THREADS
public static final int DEFAULT_MAX_THREADS未显式配置时的最大工作线程数(虚拟线程可用时该值不生效)。- See Also:
-
DEFAULT_QUEUE_CAPACITY
public static final int DEFAULT_QUEUE_CAPACITY未显式配置时的等待队列容量。- See Also:
-
-
Method Details
-
configure
注入容器配置好的工作池并解除关闭态;原先由本类创建且仍存活的默认池会被关闭。 -
worker
- Returns:
- 当前工作池(未装配时惰性创建有界默认池)
- Throws:
IllegalStateException- 已关闭且无可用工作池
-
execute
-
schedule
注册一个延迟任务(用于AsyncContext超时回调)。- Returns:
- 可用于取消的句柄;容器已关闭时返回
null
-
shutdown
public static void shutdown()进入关闭态:取消未触发的超时任务,并释放由本类创建的默认工作池。容器停机时调用。 -
reset
public static void reset()归还到「未装配」状态,供测试隔离使用。 -
isConfigured
public static boolean isConfigured()- Returns:
- 当前是否已由容器注入工作池
-
isClosed
public static boolean isClosed()- Returns:
- 当前是否处于关闭态
-