在JSP页面中使用Servlet启动多线程,因为JSP页面本身就是一个单线程模型,并且在Servlet容器内部处理请求时已经有内置的多线程机制。如果需要在JSP页面中启动多线程,需要在Servlet中进行,然后将逻辑委托给JSP页面。
// Servlet.java
@WebServlet("/startThread")
public class Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final HttpSession session = request.getSession();
Runnable task = () -> {
// 在这里执行你的任务
session.setAttribute("taskResult", "Task completed");
};
Thread thread = new Thread(task);
thread.start();
// 可以选择将线程的引用放入session,以便在JSP页面中检查其状态
session.setAttribute("myThread", thread);
// 转发到JSP页面
request.getRequestDispatcher("/WEB-INF/task.jsp").forward(request, response);
}
}JSP访问
<!-- task.jsp -->
<%
Thread myThread = (Thread) session.getAttribute("myThread");
if (myThread != null) {
if (myThread.getState() == Thread.State.TERMINATED) {
// 任务已完成
out.println("Task is completed.");
} else {
// 任务正在进行中
out.println("Task is running.");
}
}
%>