Java 如何为每个用户创建一个ThreadPoolExecutor?

Java 如何为每个用户创建一个ThreadPoolExecutor?,java,spring-boot,threadpool,Java,Spring Boot,Threadpool,我有一个要求,我们必须为每个租户创建ThreadPoolExecutor。同时,我使用Spring给定的@Async注释,但这是针对整个应用程序的。因此,如果服务器正忙于一个租户,它将影响另一个用户的租户@Async配置了ThreadPoolExecutor。 但这对于租户中的所有用户来说都很常见 编辑: 我需要每个租户的线程池。 简单地说,我需要为用户组共享线程池。该组中的所有用户都可以使用相同的线程池 现有的javaapi如何做到这一点。请帮忙 如何为租户分离线程池? 例如:租户1分配了大约

我有一个要求,我们必须为每个租户创建
ThreadPoolExecutor
。同时,我使用Spring给定的
@Async
注释,但这是针对整个应用程序的。因此,如果服务器正忙于一个租户,它将影响另一个用户的租户
@Async
配置了
ThreadPoolExecutor
。 但这对于租户中的所有用户来说都很常见

编辑: 我需要每个租户的线程池。 简单地说,我需要为用户组共享线程池。该组中的所有用户都可以使用相同的线程池

现有的javaapi如何做到这一点。请帮忙

如何为租户分离线程池? 例如:租户1分配了大约20个线程,因此所有用户(U1、U2…)都可以使用该线程池,并且不会影响其他租户。
与租户2相同,它将被分配大约20个线程……

不讨论它是否是一个“好的要求”—简单的:

  • (在自定义类中扩展
    ThreadPoolTaskExecutor
    ,并…)将其
    @SessionScope
    d
    @Bean
    添加到应用程序上下文中
  • 使用它。(通过@Async注释在控制器中)
  • 比如:

    在这样一个简单的控制器中使用它:

    @Async // !
    @GetMapping("/hello")
    @ResponseBody
    public Future<String> hello() {
        return new AsyncResult("Hello");
    }
    
    @Async/!
    @GetMapping(“/hello”)
    @应答器
    公共未来你好(){
    返回新的异步结果(“Hello”);
    }
    

    …当(且仅当)使用新的匿名浏览器/会话/用户时,我会获得MyThreadPoolExecutor日志记录。

    您希望有多少用户,因为这会很快变糟。如果单个用户a的线程池使用所有可用资源(CPU、RAM、文件系统等)然后,每个其他用户仍然必须等待,直到用户A的任务完成并释放资源,我编辑了问题。我需要它的租户,其中包含用户。我们有多个租户,用户在这里执行繁重的处理。如何做到租户明智?与Tenant1(40个线程)->Tenant1的所有用户都可以从40个线程使用它,与Tenant2(40)相同,不需要创建自定义扩展。只需编写一个创建会话范围Bean的
    @Bean
    方法。我已经编辑了我的问题。好的……但是如何将线程池共享给用户组呢?。这是一个更复杂的要求,因为spring中没有(预定义的)“租户范围”…!;)(猜猜他们如何命名他们的“自定义范围”!?)
    @Async // !
    @GetMapping("/hello")
    @ResponseBody
    public Future<String> hello() {
        return new AsyncResult("Hello");
    }