Java Don';我不理解@async的某些行为

Java Don';我不理解@async的某些行为,java,spring,asynchronous,threadpool,Java,Spring,Asynchronous,Threadpool,我很难理解@async注释的某些方面,也可能理解线程和线程池作为一个整体的工作方式。当我在spring配置文件中设置此选项时: <task:executor id="WhifExecutor" pool-size="10"/> <task:annotation-driven executor="WhifExecutor" /> 这不意味着只会启动10个线程吗?然而,当我运行一个@async a为1000次的函数时,它会在调用后立即继续执行其余代码(控制台中会显示一条

我很难理解@async注释的某些方面,也可能理解线程和线程池作为一个整体的工作方式。当我在spring配置文件中设置此选项时:

<task:executor id="WhifExecutor" pool-size="10"/>
<task:annotation-driven executor="WhifExecutor" />

这不意味着只会启动10个线程吗?然而,当我运行一个@async a为1000次的函数时,它会在调用后立即继续执行其余代码(控制台中会显示一条简单消息,显示函数被调用的次数)。过了一会儿,池函数开始返回它们的值,但奇怪的是,只从1个池和10个不同的线程返回。这是怎么回事?它怎么能调用所有1000个函数,而只使用10个线程呢?在开始线程之前,它是否会将所有线程放在某个堆栈上?我试着阅读有关这方面的文档,但找不到任何关于这一现象的信息

还有,有没有一种方法可以让它等待线程开始运行,这样我就不会立即一次调用几千个函数

在开始线程之前,它是否会将所有线程放在某个堆栈上

不是堆栈,而是队列

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