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