在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."); } } %>