Time to put a stop to Thread.stop? (original) (raw)
Martin Buchholz martinrb at google.com
Fri May 24 18:14:43 UTC 2013
- Previous message: Time to put a stop to Thread.stop?
- Next message: Time to put a stop to Thread.stop?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, May 24, 2013 at 6:18 AM, Alan Bateman <Alan.Bateman at oracle.com>wrote:
The webrev with the proposed changes is here. As I mentioned in one of the replies, there are 4 j.u.c tests that need to be updated so I've changed these tests to use Unsafe.throwException.
Alan, you're telling everyone there's no need for Thread.stop, but you are replacing usages in tests with calls to Unsafe, which is not available to normal code. So you have a kind of moral obligation here to replace usages with "ordinary" java code. There are other ways to do sneakyThrow, and perhaps a sneakyRethrow method should be added to the jdk test library.
Ordinary java code should be able to simply catch and rethrow a Throwable if type analysis can "prove" that the exception is not an Exception.
As a data point, Doug uses this:
(Doug, it's not obvious to me why you handle Error and RuntimeException specially)
/**
* A version of "sneaky throw" to relay exceptions
*/
static void rethrow(final Throwable ex) {
if (ex != null) {
if (ex instanceof Error)
throw (Error)ex;
if (ex instanceof RuntimeException)
throw (RuntimeException)ex;
ForkJoinTask.<RuntimeException>uncheckedThrow(ex);
}
}
/**
* The sneaky part of sneaky throw, relying on generics
* limitations to evade compiler complaints about rethrowing
* unchecked exceptions
*/
@SuppressWarnings("unchecked") static <T extends Throwable>
void uncheckedThrow(Throwable t) throws T {
if (t != null)
throw (T)t; // rely on vacuous cast
}
- Previous message: Time to put a stop to Thread.stop?
- Next message: Time to put a stop to Thread.stop?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]