假设从servlet启动线程是不推荐的,我想知道什么可以使这个从servlet创建和启动的线程意外停止。
例如,重用servlet线程会导致子线程被销毁。
我需要明确的参数来表明servlet生成的线程的生命周期不能保证到最后,或者支持其他情况的推理。
我不想要讨论,我想要清晰明确的例子。
从servlet创建的线程将不会被容器终止(只要容器正在运行),原因有两个:
- 容器没有对servlet内部创建的线程的引用,因此它不能在它们上调用例如
Thread.stop()
(是的,这是一个过时的方法,绝对不是终止线程的好方法,更多细节)。 - 只有线程自己知道如何正确地解锁它所锁定的监视器,所以强制线程终止将导致监视器状态不一致。
指出:
- 这个行为没有被Servlet规范覆盖,所以不能保证它将如何在你的web容器上工作。
- servlet不应该产生线程,因为这是web容器管理的资源。