【问题标题】:Don't understand some behaviour of @async不理解@async 的某些行为
【发布时间】: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


    【解决方案1】:

    是否可能在启动线程之前将它们全部放在某个堆栈上?

    不是堆栈,而是队列。

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

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多