不明白@async的某些行为

Fin*_*005 2 java spring asynchronous threadpool

我在理解@async注释的某个方面时遇到了一些困难,可能还有整个线程和线程池的工作方式.当我在spring配置文件中设置它时:

<task:executor id="WhifExecutor" pool-size="10"/>
<task:annotation-driven executor="WhifExecutor" />
Run Code Online (Sandbox Code Playgroud)

这不意味着只会启动10个线程吗?然而,当我运行一个具有@async 1000次的函数时,它会立即继续调用后的其余代码(控制台中会显示一条简单的消息来显示函数被调用的次数).然后一段时间后,池函数开始返回它们的值,但奇怪的是只有1个池和10个不同的线程.这里发生了什么?如何调用所有这1000个函数但只使用10个线程?它是否可能在启动线程之前将所有这些都放在某个堆栈上?我尝试阅读有关此文档的文档,但我找不到任何有关此现象的信息.

还有,有没有办法让它等待线程开始运行,这样我就不会立即调用几千个函数?

ska*_*man 6

它是否可能在启动线程之前将所有这些都放在某个堆栈上?

不是堆栈,而是队列.

执行程序将分配10个线程.如果所有10个线程都忙,并且添加了新任务,它们将被添加到队列中,并依次执行.一次不会执行超过10个任务.