1

Ich bin eine Bohne für Taskscheduler und TaskExecutor, wie folgend:Spring - Haben TaskExecutor und Taskscheduler mit dem gleichen Thread-Pool gesichert

@Bean 
public TaskScheduler taskScheduler() { 
    ThreadPoolTaskScheduler s = new ThreadPoolTaskScheduler(); 

    s.setThreadNamePrefix("Task-Scheduler-"); 
    s.setPoolSize(10); 
    s.setRemoveOnCancelPolicy(true); 

    return s; 
} 

@Bean 
public TaskExecutor taskExecutor() { 
    ThreadPoolTaskExecutor e = new ThreadPoolTaskExecutor(); 

    e.setThreadNamePrefix("Task-Executor-"); 
    e.setMaxPoolSize(10); 
    e.setCorePoolSize(10); 

    return e; 
} 

Ist es möglich, die zugrunde liegenden Thread-Pool-Executor-Service zwischen dem TaskExecutor und dem Taskscheduler zu teilen ? Jetzt habe ich zweimal einen Pool von jeweils 10 festen Threads, aber ich hätte gerne einen einzigen Pool von 20 Threads.

Diese Pools werden für @Async-, @Scheduled- und @Retry-Annotationen verwendet.

Antwort

1

Sie können dies nicht mit diesen beiden Klassen tun, da es sich um Implementierungen handelt, die auf einem internen Pool basieren.

Sie können jedoch Ihre eigenen Klassen TaskExecutor und TaskScheduler implementieren, die einen gemeinsamen ThreadPool verwenden.

Beachten Sie, dass ein paar Leerlauf-Threads keinen großen Einfluss auf die Performance haben werden. Wenn Sie also nicht wissen, dass zwei Pools ein großer Performance-Engpass sind, würde ich keine Zeit verschwenden.

Verwandte Themen