我有一个 Java servlet,它启动一个冗长的任务,该任务可以在发送响应后在后台执行。我可以从日志条目中看出,即使启动线程是 servlet 中的最后一件事,框架仍在新线程启动后执行与请求相关的代码。
我正在考虑将当前线程传递给新线程的构造函数(parentThread),保存该引用,并调用parentThread.join()作为run()中的第一个语句。但这看起来很笨拙。
有更好/更优雅的解决方案吗?
最佳答案
通常线程由 Servlet 容器池化/回收,因此等待终止没有什么意义。 如果您可以独立于当前请求来完成工作,那么无论如何生成线程应该没有问题。
根据您的生态系统,您应该查看 Spring 执行器服务,甚至用于调度后台任务的 @Asynchronous 抽象。您可能还想查看异步 servlet API。
关于java - 当前线程结束后启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37030117/