Java并发安全工作池队列

时间:2017-03-14 11:39:38

标签: spring multithreading java.util.concurrent

我正在编写Spring(Java 8)Web应用程序,并根据每个请求(单独的线程)我的应用程序做了一些任务,应该尽快完成,以便在浏览器中将结果返回给客户端,所以我就这样做了喜欢找工作池库,可以安全地从不同的线程访问。

我已阅读有关执行池,Rabbit MQ的信息,但我无法找到有关从不同线程访问任务队列的功能的信息。

如果有人能给我建议如何用Java做这件事,我将非常感激。

1 个答案:

答案 0 :(得分:1)

在这里,您可以通过@Async注释使用Spring支持的异步方法调用。

@Async带注释的方法将在新线程中执行,结果将在Future对象中可用( void也支持返回)。请注意,方法调用是非阻塞,这将有助于快速返回响应,而无需等待每个任务完成。但是,如果需要,可以使主线程等待所有任务,即Future通过阻塞的Future.get()完成。

要配置异步支持,请使用@EnableAsync注释配置类,并按照here所述提供以下方法定义。

public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(2);
    executor.setMaxPoolSize(2);
    executor.setQueueCapacity(500);
    executor.initialize();
    return executor;
}