parent 个线程在它们退出 servlet 容器之前是否等待 child 个线程退出?

Do parent threads wait for child threads to exit before they also exit in servlet containers?

问题: 如果您在 servlet/controller 中生成新线程并且主线程处理该控制器已经完成,那么控制器线程是否会阻塞,直到它的所有 child 线程都在它之前 returned 也 returns?

背景: 我在控制器内部产生的单独线程中有一些代码 运行,但处理控制器的线程似乎并不独立 return; child 线程处理时间的确切长度有很长的延迟。它似乎在等待 child 个线程在退出前完成。这是正常的吗?

问题简化: 我知道 child 线程将 运行 而不会阻塞 parent 当 parent 是 运行ning 但是当 parent 完成它的任务时会发生什么?

您需要在 Thread 上显式调用 join 以等待它完成,否则它只会在后台运行,不会影响您的 parent Thread。所以你的控制器不应该阻塞,直到你的 child 线程 return.

虽然,您的容器中可能有一些配置,具体取决于您的容器,这可能会导致这种情况,但我对此表示严重怀疑。