sevletは単一スレッドかマルチスレッドか、マルチスレッドの下で安全なservletプログラムをどのように書くか


sevletは単一スレッドかマルチスレッドか、マルチスレッドの下で安全なservletプログラムをどのように書くか
まず、サーブレットは単一のインスタンスであり、同じビジネスリクエストに対して1つだけインスタンスであることを明確にします.異なるビジネスリクエストは、配布によって複数のインスタンスを生成することができる.次に、単一インスタンスの理由は、ibatisのQuerydao、UpdateDaoのように、単一インスタンスが単一インスタンスであるためだと思います.再:サーブレットが単一インスタンスマルチスレッドであるため、単一インスタンスが要求を処理できるのはなぜですか.http://hiyachen.cublog.cn  [email protected]まずコードを見てみましょう:package hiya.test;public class Servlet { private static Servlet instance=new Servlet();private Servlet(){  }public static Servlet getInstance(){  return instance;}public void services(){  System.out.println("do something");}static class Client extends Thread{  private Servlet servlet;  public Client(Servlet servlet){   this.servlet=servlet;  }  public void run(){   servlet.services();  //System.out.println("do something");  }}public static void main(){  Servlet servlet=Servlet.getInstance();  for(int i=0;i<10;i++){   Client client=new Client(servlet);   client.start();  }}}これは単一インスタンスマルチスレッドの実装コードです.(jdkソースコードを貼り付けたいです.)
servlet          :
servlet  init       (  web    ,  loadOnStartup   )     ,         ,      。
servlet service , 。

JSP  web   "   servlet"     ,web             ,A,B,C 3   ,  3       ,      servlet。    。


1:servlet         。2:Servlet        Java        ,        Web     。   Servlet                     
3: jsp: 。   , 。




Servlet/JSP ASP、PHP , 。 Servlet/JSP , , 。 , Servlet/JSP , , , 。   Servlet     Servlet Java , Web 。 Servlet ,Servlet web.xml Servlet 。 Servlet , Servlet , 。Servlet , 1 。 1 Servlet    , Servlet , , 。 Servlet Web , Servlet 。   Servlet   Servlet , 。 Import javax.servlet. *; Import javax.servlet.http. *; Import java.io. *; Public class Concurrent Test extends HttpServlet {PrintWriter output; Public void service (HttpServletRequest request,   www.2cto.com HttpServletResponse response) throws ServletException, IOException {String username; Response.setContentType ("text/html; charset=gb2312"); Username = request.getParameter ("username"); Output = response.getWriter (); Try {Thread. sleep (5000); // , } Catch (Interrupted Exception e){} output.println(" :"+Username+"
"); } }    Servlet output, service 。 Servlet , , , 。 。 , 、 , 。 web.xml Servlet, a b Servlet( IE , ), :   a: http://localhost: 8080/servlet/ConcurrentTest? Username=a   b: http://localhost: 8080/servlet/ConcurrentTest? Username=b    b a , 2 : 2 a b    2 ,Web a b , a , a b 。 Servlet 。 , output Servlet 。   Java JMM(Java Memory Model)JMM 。 JMM , (Main Memory),Java , 。 (Working Memory), , , , ; , 。 JMM, Servlet 3 。 3 Servlet JMM    3 , a b ( a 、b ) ,Servlet , 4 。 a b T1 Servlet T2   Servlet T3 output=a username=a 5000 , CPU T4   output=b ( )username=b 5000 , CPU T5 b a username ,a 。 T6   b b username ,b 。                    4 Servlet    4 , b output a output , a b 。 a ,b output , 2 , , 。 Servlet    , Servlet 。 。   1、 SingleThreadModel    Servlet 。 Servlet , Servlet service , 。 Concurrent Test : Public class Concurrent Test extends HttpServlet implements SingleThreadModel { ………… }   2、    synchronized , Servlet 。 : ………… Public class Concurrent Test extends HttpServlet { ………… Username = request.getParameter ("username"); Synchronized (this){ Output = response.getWriter (); Try { Thread. Sleep (5000); } Catch (Interrupted Exception e){} output.println(" :"+Username+"
"); } } }   3、    , Servlet , Servlet 。    Servlet , , : …… Public class Concurrent Test extends HttpServlet {public void service (HttpServletRequest request, HttpServletResponse Response) throws ServletException, IOException { Print Writer output; String username; Response.setContentType ("text/html; charset=gb2312"); …… } }    , Servlet 。 , Servlet SingleThreadModel ,Servlet Servlet , 。 SingleThreadModel Servlet2.4 ; , 。 , , 。 , , 。 Servlet ; Serlet Servlet 。 Java , , , 。 Servlet/JSP ASP、PHP , 。 Servlet/JSP , , 。 , Servlet/JSP , , , 。   Servlet     Servlet Java , Web 。 Servlet ,Servlet web.xml Servlet 。 Servlet , Servlet , 。Servlet , 1 。 1 Servlet    , Servlet , , 。 Servlet Web , Servlet 。   Servlet   Servlet , 。 Import javax.servlet. *; Import javax.servlet.http. *; Import java.io. *; Public class Concurrent Test extends HttpServlet {PrintWriter output; Public void service (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username; Response.setContentType ("text/html; charset=gb2312"); Username = request.getParameter ("username"); Output = response.getWriter (); Try {Thread. sleep (5000); // , } Catch (Interrupted Exception e){} output.println(" :"+Username+"
"); } }    Servlet output, service 。 Servlet , , , 。 。 , 、 , 。 web.xml Servlet, a b Servlet( IE , ), :   a: http://localhost: 8080/servlet/ConcurrentTest? Username=a   b: http://localhost: 8080/servlet/ConcurrentTest? Username=b    b a , 2 : 2 a b    2 ,Web a b , a , a b 。 Servlet 。 , output Servlet 。   Java JMM(Java Memory Model)JMM 。 JMM , (Main Memory),Java , 。 (Working Memory), , , , ; , 。 JMM, Servlet 3 。 3 Servlet JMM    3 , a b ( a 、b ) ,Servlet , 4 。 a b T1 Servlet T2   Servlet T3 output=a username=a 5000 , CPU T4   output=b ( )username=b 5000 , CPU T5 b a username ,a 。 T6   b b username ,b 。                    4 Servlet    4 , b output a output , a b 。 a ,b output , 2 , , 。 Servlet    , Servlet 。 。   1、 SingleThreadModel    Servlet 。 Servlet , Servlet service , 。 Concurrent Test : Public class Concurrent Test extends HttpServlet implements SingleThreadModel { ………… }   2、    synchronized , Servlet 。 : ………… Public class Concurrent Test extends HttpServlet { ………… Username = request.getParameter ("username"); Synchronized (this){ Output = response.getWriter (); Try { Thread. Sleep (5000); } Catch (Interrupted Exception e){} output.println(" :"+Username+"
"); } } }   3、    , Servlet , Servlet 。    Servlet , , : …… Public class Concurrent Test extends HttpServlet {public void service (HttpServletRequest request, HttpServletResponse Response) throws ServletException, IOException {