gpt4 book ai didi

java - 不理解@async的某些行为

转载 作者:行者123 更新时间:2023-11-30 05:58:34 28 4
gpt4 key购买 nike

我在理解 @async 注释的某些方面,以及线程和线程池作为一个整体的工作原理时遇到了一些困难。当我在 spring 配置文件中设置它时:

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

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

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

最佳答案

Does it maybe put all of them on some stack before starting the threads?

不是堆栈,而是队列。

执行器将被分配10个线程。如果10个线程都忙,又有新的任务添加,就会被添加到队列中,依次执行。一次执行的任务不超过10个。

关于java - 不理解@async的某些行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183822/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com