@Override
    public void run() {
      try {
        doWork();
      } catch (Throwable t) {
        ctx.threadFailed(t);
      }
      ctx.threadDone();
    }
A thread that can be added to a test context, and properly passes exceptions through.
hbase-server/src/test/java/org/apache/hadoop/hbase/MultithreadedTestUtil.java