I needed to start a thread to do some task and then to be able to check that it had finished without an error/exception.
In Java if the code executed in a new thread throws an error, it doesn't matter that much, it just executes the next instruction after thread.join().
Some solutions found on the internet were
- to put all the code inside the thread in a try-catch block and in the catch block populate a map with the thread name and status. Then you could get the status by querying statusMap[threadName]
- add a status status field to your class witch is a subclass of Thread. Then you do the same thing as above and in the catch block modify the status to failed (status is successfull in the begining). You get get the status by thread.status
So my solution is to add a new field to the Thread class, and use Thread.setDefaultUncaughtExceptionHandler to populate it.
It looks something like
Thread.metaClass.failed = false
Thread.setDefaultUncaughtExceptionHandler(
{t, ex ->
t.failed = true
} as Thread.UncaughtExceptionHandler)
def th= Thread.start {
println ' in thread 1'
throw new RuntimeException("thread exception")
println ' in thread 2'
}
th.join()
assert th.failed == true
And now I can see if any exception/error has been thrown. And all the threads I start will have this property.