簡體   English   中英

如何為每個用戶創建一個 ThreadPoolExecutor?

[英]How to create One ThreadPoolExecutor per user?

我有一個要求,我們必須為每個租戶創建ThreadPoolExecutor 同時我正在使用 Spring 給定@Async Annotation,但這適用於整個應用程序。 所以如果服務器忙於一個租戶,它會影響另一個用戶的租戶。 @Async配置有ThreadPoolExecutor 但對於跨租戶的所有用戶來說,這很常見。

編輯:我需要每個租戶的線程池。 簡單來說,我需要為用戶組共享 ThreadPool。 該組中的所有用戶都可以使用相同的線程池。

現有的 java API 怎么可能做到這一點。 請幫忙。

如何為租戶分離線程池? 例如:租戶 1 分配了大約 20 個線程,因此所有用戶(U1、U2 ....)都可以使用該線程池,並且不會影響另一個租戶。 與租戶 2 相同,它將被分配大約 20 個線程....

不討論這是否是“好要求” - 簡單易懂:

  1. (在自定義 class 中擴展ThreadPoolTaskExecutor Executor 和...)將它的@SessionScope d @Bean添加到您的應用程序上下文中。
  2. 用它。 (通過 @Async 注解在控制器中)

喜歡:

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class MyThreadPoolExecutor extends ThreadPoolTaskExecutor {

   // only for test-/debuging
   static volatile int cnt = 0;

   public MyThreadPoolExecutor() {
      // only for test-/debuging
      System.out.format("MyThreadPoolExecutor#%d%n", cnt++);
   }
}

在一個簡單的 controller 中使用它,如下所示:

@Async // !
@GetMapping("/hello")
@ResponseBody
public Future<String> hello() {
    return new AsyncResult("Hello");
}

..我得到 MyThreadPoolExecutor 日志記錄,當(且僅當)使用新的隱身瀏覽器/會話/用戶時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM