Time to put a stop to Thread.stop?

Alan Bateman Alan.Bateman at oracle.com
Wed Oct 9 11:00:59 UTC 2013


On 09/10/2013 08:47, Dr Heinz M. Kabutz wrote:
> I noticed the other day when using Java 8 that Thread.stop(Throwable) 
> was throwing an UOE.  Unfortunately I missed the discussion in May 
> amongst the thousands of other important JDK emails.  Thus I presume 
> that nothing I might have to say on the matter would change what is 
> currently in the OpenJDK ;-)  But I'd like to state it "for the 
> record" anyway.
>
> Throwing checked exceptions in an unchecked context is, IMHO, 
> something one should almost never do, except maybe in test cases.  Up 
> to now, I've known of quite a few ways to do this though:
>
> 1. Thread.stop(Throwable) with some mangling - see ThrowerConcurrent 
> in http://www.javaspecialists.eu/archive/Issue144.html
> 2. Abusing generics
> 3. Class.newInstance(), described in Java Puzzlers 
> (http://www.javaspecialists.eu/archive/Issue144.html)
> 4. Unsafe.throwException() similar to ThrowerConcurrent in #1.
>
> Since this is something that we should not do anyway, it is no harm to 
> remove one of the ways, this being Thread.stop(Throwable).
As I'm sure you can appreciate, it consumes a lot of oxygen to remove 
something and I'm hoping we don't have to spend any more time on this 
one. One comment on your list is that #1 differs in that it can cause 
other threads to misbehave and this is one of the main motives for 
finally pulling the plug on this method. For a sneakyThrow on the 
current thread then there are other options (as your puzzlers 
demonstrate) but hopefully there aren't too many cases where non-test 
code needs to do this.

-Alan.



More information about the core-libs-dev mailing list