javaweb:servlet的多线程同步问题
? 1. Servlet/JSP技術(shù)和ASP,PHP等相比,由于其多線程運(yùn)行而具有很高的執(zhí)行效率。
? 2. 由于Servlet/JSP默認(rèn)是以多線程模式執(zhí)行的,所以,在編寫(xiě)代碼時(shí)需要非常細(xì)致地考慮多線程的同步問(wèn)題。
? 3. 如果在編寫(xiě)Servlet/JSP程序時(shí)不注意到多線程同步的問(wèn)題,這往往造成編寫(xiě)的程序在少量用戶訪問(wèn)時(shí)沒(méi)有任何問(wèn)題,而在并發(fā)用戶上升到一定值時(shí),就會(huì)經(jīng)常出現(xiàn)一些莫名其妙的問(wèn)題,對(duì)于這類隨機(jī)性的問(wèn)題調(diào)試難度也很大。
??
? 4. servlet是單實(shí)例的,會(huì)服務(wù)于所有的請(qǐng)求。也就是說(shuō)當(dāng)有多個(gè)用戶同時(shí)訪問(wèn)某個(gè)Servlet實(shí)例中的成員變量時(shí),會(huì)訪問(wèn)該唯一的Servlet實(shí)例中的成員變量,如果對(duì)成員變量進(jìn)行寫(xiě)入操作,那就會(huì)導(dǎo)致Servlet的多線程問(wèn)題,即數(shù)據(jù)不一致。
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中最好不要使用成員變量,防止寫(xiě)入時(shí),出現(xiàn)數(shù)據(jù)不一致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);} }?
總結(jié)
以上是生活随笔為你收集整理的javaweb:servlet的多线程同步问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IntelliJ IDEA启动Tomca
- 下一篇: javaweb:Cookie