我在 java 程序中遇到了一些奇怪的行为。基本上,我有一个要处理的项目列表,我可以选择一次处理一个,或者一次处理所有(这意味着一次 3-4 个)。每个项目需要大约 10 个线程来处理,因此一次处理 1 个项目 = 10 个线程,一次处理 2 个 = 20 个线程,一次处理 4 个 = 40 个线程,依此类推。
奇怪的是,如果我只处理一个项目,它会在大约 50-150 毫秒内完成。但是,如果我一次处理 2 个,则每个项目最多需要 200-300 毫秒。一次 3 个 = 每项 300-500 毫秒,一次 4 个 = 每项 400-700 毫秒,依此类推。
为什么会这样?我之前做过研究,说 jvm 可以轻松处理多达 3000-4000 个线程,那么为什么我只需要 30-40 个线程就变慢了呢?这是正常行为吗?我认为拥有 40 个线程意味着每个线程将并行工作,而不是像看起来那样在队列中工作。