Thread.stop()

Mo DeJong kaffe@rufus.w3.org
Mon, 22 May 2000 12:31:25 -0700 (PDT)


I also found this note in kaffe/FAQ/FAQ.pthreads

* We do not support asynchronous exceptions via Thread.stop()

Mo Dejong
Red Hat Inc.

On Mon, 22 May 2000, Mo DeJong wrote:

> I was under the impression that methods like Thread.stop() were
> removed from the JDK or replaced with no-ops. I seem to remember
> that they were never implemented in Netscape's JVM. The whole
> concept of stoping a thread seems like a bad idea, a thread
> should expire due to natural causes.
> 
> Here are some notes about it from the Sun developer site.
> http://developer.java.sun.com/developer/bugParade/bugs/4187649.html
> http://developer.java.sun.com/developer/bugParade/bugs/4248898.html
> 
> Mo Dejong
> Red Hat Inc.
> 
> On 22 May 2000, Jason Baker wrote:
> 
> > 
> > Archie Cobbs <archie@whistle.com> writes:
> > 
> > > Email me a simple test case and I'll run it under both kaffe and JDK 1.2.
> > 
> > Weird.  Blackdown 1.2.2 doesn't seem to asynchronously stop threads at
> > all, while jdk 1.1.7 can do it some of the time.  Neither one seems to
> > throw an exception with a stack trace at all.
> > 
> > Jason
> > ------------------------------------------------------------------------------
> > 1.2.2:
> > nephi(53) java Die 
> > sleeper started
> > doing it...
> > loop started
> > caught an error
> > java.lang.Error: throwing from main
> > done
> > doing it...
> > ^C
> > ------------------------------------------------------------------------------
> > 1.1.7:
> > nephi(57) java Die
> > sleeper started
> > doing it...
> > loop started
> > caught an error
> > java.lang.Error: throwing from main
> > done
> > doing it...
> > ^C
> > nephi(59) java Die 100
> > sleeper started
> > doing it...
> > loop started
> > caught an error
> > java.lang.Error: throwing from main
> > done
> > doing it...
> > caught an error
> > java.lang.Error: throwing from main
> > done
> > ------------------------------------------------------------------------------
> > patched kaffe:
> > sleeper starteddoing it...
> > 
> > loop started
> > caught an error
> > java.lang.Error: throwing from main
> >         at java.lang.Thread.waitOn(Thread.java:475)
> >         at java.lang.Thread.sleep(Thread.java:364)
> >         at Die$1.doIt(Die.java:24)
> >         at Die.run(Die.java:7)
> > done
> > doing it...
> > caught an error
> > java.lang.Error: throwing from main
> >         at Die.run(Die.java:7)
> > done
> > ------------------------------------------------------------------------------
> > public abstract class Die extends Thread {
> >   abstract void doIt();
> > 
> >   public void run()
> >   {
> >     System.err.println("doing it...");
> >     try { doIt(); }
> >     catch (Error e) {
> >       System.err.println("caught an error");
> >       e.printStackTrace(System.err);
> >     }
> >     System.err.println("done");
> >   }
> > 
> >   static public void main(String[] args)
> >     throws InterruptedException
> >   {
> >     int startup = 1000;
> >     if (args.length > 0)
> >       startup = Integer.parseInt(args[0]);
> > 
> >     Thread u = new Die() {
> >       void doIt() {
> > 	try { Thread.sleep(300000); }
> > 	catch (InterruptedException _) { }
> >       }
> >     };
> >     u.start();
> >     System.err.println("sleeper started");
> >     Thread.sleep(startup);
> >     u.stop(new Error("throwing from main"));
> > 
> >     Thread t = new Die() {
> >       void doIt() { while (true) ; }
> >     };
> >     t.start();
> >     System.err.println("loop started");
> >     Thread.sleep(startup);
> >     t.stop(new Error("throwing from main"));
> >   }
> > }
> >     
> >       
> > 
>