[英]How to create One ThreadPoolExecutor per user?
我有一個要求,我們必須為每個租戶創建ThreadPoolExecutor
。 同時我正在使用 Spring 給定@Async
Annotation,但這適用於整個應用程序。 所以如果服務器忙於一個租戶,它會影響另一個用戶的租戶。 @Async
配置有ThreadPoolExecutor
。 但對於跨租戶的所有用戶來說,這很常見。
編輯:我需要每個租戶的線程池。 簡單來說,我需要為用戶組共享 ThreadPool。 該組中的所有用戶都可以使用相同的線程池。
現有的 java API 怎么可能做到這一點。 請幫忙。
如何為租戶分離線程池? 例如:租戶 1 分配了大約 20 個線程,因此所有用戶(U1、U2 ....)都可以使用該線程池,並且不會影響另一個租戶。 與租戶 2 相同,它將被分配大約 20 個線程....
不討論這是否是“好要求” - 簡單易懂:
ThreadPoolTaskExecutor
Executor 和...)將它的@SessionScope
d @Bean
添加到您的應用程序上下文中。喜歡:
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.