javaweb:servlet的多线程同步问题
生活随笔
收集整理的這篇文章主要介紹了
javaweb:servlet的多线程同步问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 1. Servlet/JSP技術和ASP,PHP等相比,由于其多線程運行而具有很高的執行效率。
? 2. 由于Servlet/JSP默認是以多線程模式執行的,所以,在編寫代碼時需要非常細致地考慮多線程的同步問題。
? 3. 如果在編寫Servlet/JSP程序時不注意到多線程同步的問題,這往往造成編寫的程序在少量用戶訪問時沒有任何問題,而在并發用戶上升到一定值時,就會經常出現一些莫名其妙的問題,對于這類隨機性的問題調試難度也很大。
??
? 4. servlet是單實例的,會服務于所有的請求。也就是說當有多個用戶同時訪問某個Servlet實例中的成員變量時,會訪問該唯一的Servlet實例中的成員變量,如果對成員變量進行寫入操作,那就會導致Servlet的多線程問題,即數據不一致。
import java.io.IOException; import java.io.PrintWriter;@javax.servlet.annotation.WebServlet(name = "HelloWorldServlet") public class HelloWorldServlet extends javax.servlet.http.HttpServlet {//private String username; // servlet中最好不要使用成員變量,防止寫入時,出現數據不一致protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {doGet(request,response);}protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {String username = request.getParameter("username");System.out.println(username);System.out.println(Thread.currentThread().getName()+" before");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+" after");request.setAttribute("username",username);request.getRequestDispatcher("hello.jsp").forward(request,response);} }?
總結
以上是生活随笔為你收集整理的javaweb:servlet的多线程同步问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA启动Tomca
- 下一篇: javaweb:Cookie