【发布时间】:2011-05-10 04:31:40
【问题描述】:
我在理解@async 注释的某个方面,以及线程和线程池作为一个整体的工作方式时遇到了一些困难。当我在我的 spring 配置文件中设置它时:
<task:executor id="WhifExecutor" pool-size="10"/>
<task:annotation-driven executor="WhifExecutor" />
那不是意味着只会启动 10 个线程吗?然而,当我运行一个具有 1000 次 @async 的函数时,它会在调用后立即继续执行其余代码(控制台中会显示一条简单的消息,以显示该函数被调用的次数)。然后过了一会儿,池函数开始返回它们的值,但奇怪的是只有 1 个池和 10 个不同的线程。这里发生了什么?它怎么能调用所有这 1000 个函数却只使用 10 个线程?在启动线程之前,它是否可能将所有这些都放在某个堆栈上?我尝试阅读有关此问题的文档,但找不到有关此现象的任何信息。
另外,有没有办法让它等待线程开始运行,这样我就不会立即立即调用几千个函数?
【问题讨论】:
标签: java spring asynchronous threadpool