代码之家  ›  专栏  ›  技术社区  ›  Robert Bain

在servlet容器中创建新线程时,最佳做法是什么?

  •  0
  • Robert Bain  · 技术社区  · 4 年前

    今天我看到了一些使用 Executors.newSingleThreadScheduledExecutor() 在每个请求的基础上轮询REST API的最终状态(想想 COMPLETE , FAILED 知道servlet容器已经是一个高度并发的环境,我担心每个请求线程都在创建另一个线程。

    我已经考虑过创建一个固定大小的线程池,但我不确定它是否必须以servlet容器特定的方式进行管理。我不确定如何决定最佳尺码。我也不完全相信这是正确的做法。

    我想通过解释原因来确认这确实是危险的,并理解高级解决方案可能是什么样子。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Joakim Erdfelt    4 年前

    servlet AsyncContext.start(Runnable) 如果您希望从您的 Runnable (这将在Servlet容器的线程池中运行,并允许容器管理线程周围的各种上下文,如类加载器、安全性、cdi、会话等)。

    AsyncContext 方法是使用Servlet容器线程来进行处理。如果您还使用Servlet异步I/O,那么您已经大大抵消了这一负面影响,而且您的扩展能力实际上会有显著的提高。

    如果您不需要从您的 可跑步 ,然后使用从Java获得的线程池中执行的简单线程 Executors 。

    推荐文章