Hi,
I just want to add a note to the testing in my last email, because I can
not explain [0] and [1] by myself :-)
[0]
If I use both the following:
Object sync=new Object();
or
private static Object sync=new Object();
I get the same result! :-) and when I:
System.out.println("P1="+request.getParameter("P1")+"
thread="+Thread.currentThread()+" sync="+sync);
I always get the the same sync -- "java.lang.Object@697676" :-) (even if I
restart my Servelt engine). I guess now my Servelt engine only make
ONE instance of my class -- servlet_ht. But if so, how to explain [1] ?
[1] If I don't do the following:
synchronized(sync){
...
sync.notifyAll();
}
I will get the "cross" of "11111" and "22222" in the
"DOS Command Prompt" of my Servlet engine
Could anybody explain [0] and [1] ? Thanks in advance!
100 cent Receiver -- Bo :-)
Oct.06, 2000
Bo Xu wrote:
> Hi ,
>
> This morning I did a simple testing about
> [cocurrent programming] + [Servlet] :-)
>
> 0
> a
> * I use J2SE1.3 + Jsdk2.1 as Servlet engine
> * I use J2SE1.3 to start two Java Applications
> b I use 3 "DOS Command Prompt" :
> * one for Servlet engine
> * one for the first Java Application which use URLConnection
> to communicate to my Servlet.
> * one for the second Java Application which use URLConnection
> to communicate to my Servlet.
>
> 1
> a the the following is my Servlet code:
> *************************************************
> import javax.servlet.*;
> import javax.servlet.http.*;
>
> import java.io.*;
> import java.net.*;
> import java.util.*;
>
> public class servlet_ht extends HttpServlet {
> ObjectOutputStream os=null;
> ObjectInputStream is=null;
> String s_tmp=null;
>
> Object sync=new Object();
>
> public void init(ServletConfig config) throws ServletException {
> super.init(config);
> }
>
> public void doGet(HttpServletRequest request, HttpServletResponse response)
> throws ServletException, IOException{
> int i=0;
> synchronized(sync){
>
> System.out.println("get a GET...");
> try{
> response.setContentType("application/octet-stream");
> os=new ObjectOutputStream( response.getOutputStream() );
> os.writeObject("in GET=aaaaa");
> os.flush();
>
> os.close(); os=null;
>
> while(i<10){
> System.out.println("P1="+request.getParameter("P1")+"
> thread="+Thread.currentThread() );
> i++;
> Thread.currentThread().sleep(1000);
> }
> }catch(Exception e){System.out.println("e="+e);}
>
> sync.notifyAll();
> }
>
> }
>
> public void doPost(HttpServletRequest request, HttpServletResponse response)
> throws ServletException, IOException{
> System.out.println("get a POST...");
> ...
> }
>
> public String getServletInfo(){
> return "servlet_ht";
> }
>
> }//class
> *************************************************
>
> b the the following is my Java Application code:
> *************************************************
> import java.applet.Applet;
>
> import java.net.*;
> import java.io.*;
>
> public class applet_ht extends Applet {
>
> String input=null;
>
> public void init() {
> URL url=null;
> //HttpURLConnection con=null;
> URLConnection con=null;
> ObjectOutputStream os=null;
> ObjectInputStream is=null;
> String s_tmp=null;
>
> try{
> url=new URL("http://xxx.xxx.xxx.xxx:8080/servlet/servlet_ht?P1="+input);
> con=(URLConnection)url.openConnection();
> //con=(HttpURLConnection)url.openConnection();
> //con.setRequestMethod("GET");
> con.setUseCaches(false);
> con.setRequestProperty("CONTENT_TYPE", "application/octet-stream");
> con.setDoInput(true);
> con.setDoOutput(true);
>
> is=new ObjectInputStream(con.getInputStream());
> s_tmp=(String)is.readObject();
> System.out.println("in send, return from servlet ="+s_tmp);
> //s_tmp=null;
>
> is.close(); is=null;
> //os.close(); os=null;
>
> }catch(Exception e){System.out.println("e="+e);}
>
> }
>
> public static void main(String[] args) {
> applet_ht xxx=new applet_ht();
> xxx.input=args[0];
> xxx.init();
> }
>
> }
> *************************************************
>
> 2 The following is the "steps" of this testing:
> [a] I run "java applet_ht 11111" to start the
> first Java Application JUST after I
> run [b]
> [b] I run "java applet_ht 22222" to start the
> second Java Application JUST after I
> run [a]
> [c] I continue to do [a] and [b] :-) :-) :-) [ This
> is a little bit like playing drum :-) ]
>
> 3
> 2 The following is the result of this testing:
> Before my arms and fingers are sour, :-) :-) :-) I have
> done many times of such testing:
> a in the "Command Prompt" of Servlet engine,
> I always get 10 "11111" or 10 "22222", I never
> find the "cross :-)" of several "11111" and "22222".
> b and every time the thread name is different, for
> example,
> ...
> Thread[Thread-10,5,main]
> Thread[Thread-11,5,main]
> Thread[Thread-12,5,main]
> ...
>
> Can this testing prove that we can lock some codes
> in Servlet ? :-) I hope so, otherwise my arms are
> sour for nothing :-) :-) :-)
>
> 1.99999 cent provider -- Bo ArmStrong :-) :-)
>
> Oct. 06, 2000
>
> ___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html