gpt4 book ai didi

java - ExecutorService(int n) 和 Thread.activeCount() 是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 08:38:12 25 4
gpt4 key购买 nike

我有以下代码片段:

int k = 4;

ExecutorService e = Executors.newFixedThreadPool(k);
for (int i = 1; i <= k; i++) {
e.execute(new C(i));
e.execute(new C(i));
}
int active = Thread.activeCount();
System.out.println(active);
e.shutdown();

很明显,我在循环中每次迭代都提交了两个 C。在我的例子中,提交了 8 个 C,即使 ExecutorService 的大小固定为 4。这也可以通过计算 Activity 线程数 5 来确认。

这种行为是故意的吗?我不明白为什么似乎只有 4 个新线程被启动和计数,尽管提交了 8 个。如果有人能为我澄清 ExecutorService 和 Thread.activeCount() 的概念,我会很高兴。

最佳答案

您创建的 ExecutorService 的主要目标是一个固定大小的线程池(在您的例子中是四个线程)。如果您看到仅为您的八项工作创建了四个 Thread 实例,那么它正在按设计工作。

您似乎认为应该创建八个线程。想象一下,如果您提交了 100 万件作品;如果创建一百万个线程,那将是一场灾难。

抽象允许您控制一次使用多少线程,而不考虑有多少项目要处理。 ExecutorService 处理根据需要多次重复使用四个线程来处理您传递给 execute 调用的所有项目的复杂性。

可以用银行来类比。您创建了一家银行,其中有四个出纳员(线程池中的四个线程)和八个客户(对 execute 的八次调用)。当出纳员完成与客户的交易后,排队的下一位客户将由该出纳员提供服务。您可以通过调用 execute 将某人添加到队列中,ExecutorService 会管理其他一切。您可以通过初始化 ExecutorService 的方式来控制线程(出纳员)的数量(您可以创建许多不同的风格)。

关于java - ExecutorService(int n) 和 Thread.activeCount() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42235904/

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