Thanks. I think the issue is what happens when the Thread doesn't
want to die or is blocking. With blocking i/o, interrupt() is supposed
to throw
an exception and you can poll the interrupted status. Closing the
blocking stream
is supposed to be the best way. However,
as far as I know, there is no way to signal a thread that
is waiting for entry into a synchronized block. I didn't find anything
too encouraging in Lea's book either.
Thanks.
->-----Original Message-----
->From: Bo Xu [mailto:[EMAIL PROTECTED]]
->Sent: Monday, August 06, 2001 1:43 PM
->To: [EMAIL PROTECTED]
->Subject: Re: is there support for raw tcp sockets ?
->
->
->Mike Marchywka wrote:
->
->> In the DayTime Server example I have, there appears to be a call
->> to Thread.stop() ( on page 301 in Hunter/Crawford)to stop the
->> daemon thread. Is this accepted procedure or is there a more recent
->> edition?
->> Do you guys have any comments on using Thread.stop()
->> in general, not just in servlets? I do this, optionally, in
->> applets when everything goes bad and the only apparent alternative
->> is hanging a browser. How do you kill a thread stuck waiting to get
->> into a synchronized block? Is this improved in 1.4?
->>
->> It doesn't look like there is really anything more dangerous about
->> launching a thread
->> from a servlet than from anything else(especially compared
->to an applet
->> inside
->> of an undetermined browser!).
->>
->> Thanks.
->> [...]
->
->Hello Mike, I found the following ways to "end" a loop-thread
->from several books and emails, I am also trying to use it in
->init/destroy or ServletContextListener of Servlet :-)
->
->Class MyClass implements Runnable
-> Thread thisThread; //a reference to that endless-loop-Thread
-> volatile boolean isAlive; ..a flag
-> InputStream is(or socket) ; //Try(not sure) to end the
->io-loop by closing
->is/socket
->
-> public void run(){
-> thisThread=Thread.currentThread();
->
-> while(true){ //or while(isAlive)
-> //way0
-> if(Thread.currentThread().isInterrupted()) return/break;
->
-> //way1
-> if(!isAlive) return/break;
->
-> //way2 to end sleep/join/wait by InterruptedException
-> try{
-> Thread.sleep()
-> or
-> Thread.join()
-> or
-> synchronized-Object.wait()
-> }catch(InterruptedException e) {return/break;}
->
->
-> //method3
-> try{
-> for io: I guess it is possible to end io
->by ending the
->underlying
-> socket/stream, then catch the
->NullPointerException or other
-> Error/Exception.
-> }catch(...){return/break;}
-> }
-> }
->
-> //invoked by other Thread
-> public void synchronized end(){
-> if(is!=null) {is.close(); is=null;}
-> if(thisThread!=null && thisThread.isAlive()) {
->thisThread.interrupt();}
-> isAlive=false; //end() method is a synchronized
->method, this can
->re-confirm that
-> //isAlive is "visible" to that
->endless-loop-Thread
-> }
->
->}
->
->
->just as a reference :-) have a nice day :-)
->
->Bo
->Aug.06, 2001
->
->______________________________________________________________
->_____________
->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