在Spring Boot中創建多個線程池可以使用Java的配置類來實現。首先,創建一個配置類,如下所示:
@Configuration
public class ThreadPoolConfig {
@Bean("threadPoolA")
public ExecutorService threadPoolA() {
return Executors.newFixedThreadPool(10);
}
@Bean("threadPoolB")
public ExecutorService threadPoolB() {
return Executors.newFixedThreadPool(10);
}
}
在上面的示例中,我們定義了兩個線程池,分別是threadPoolA和threadPoolB。可以根據實際需求自定義線程池的名稱和屬性。
接下來,在使用線程池的地方,通過@Qualifier注解指定要使用的線程池,如下所示:
@Service
public class MyService {
@Autowired
@Qualifier("threadPoolA")
private ExecutorService threadPoolA;
@Autowired
@Qualifier("threadPoolB")
private ExecutorService threadPoolB;
// 使用threadPoolA執行任務
public void executeTaskA() {
threadPoolA.execute(() -> {
// 執行任務邏輯
});
}
// 使用threadPoolB執行任務
public void executeTaskB() {
threadPoolB.execute(() -> {
// 執行任務邏輯
});
}
}
在上面的示例中,我們通過@Autowired和@Qualifier注解將線程池注入到MyService類中,并在executeTaskA和executeTaskB方法中使用不同的線程池執行任務。
需要注意的是,創建的線程池需要在使用完畢后手動關閉,以避免資源泄露。可以在Spring Boot的生命周期中添加一個銷毀方法來關閉線程池,如下所示:
@Configuration
public class ThreadPoolConfig {
// 省略其他代碼
@PreDestroy
public void destroy() {
threadPoolA.shutdown();
threadPoolB.shutdown();
}
}
在上面的示例中,我們使用@PreDestroy注解標記destroy方法,在Spring Boot停止時會自動調用該方法,關閉線程池。