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ソースコードを貼り付けたいです.)
まず、サーブレットは単一のインスタンスであり、同じビジネスリクエストに対して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 {