Class RunnableErrorForwarder


  • public final class RunnableErrorForwarder
    extends java.lang.Object
    A utility class to forward any uncaught Error or RuntimeException from a Runnable executed in a worker thread back to the parent thread. The simplified usage pattern looks like this:
     RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
     for ( Runnable task : tasks )
     {
         executor.execute( errorForwarder.wrap( task ) );
     }
     errorForwarder.await();
     
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.concurrent.atomic.AtomicInteger counter  
      private java.util.concurrent.atomic.AtomicReference<java.lang.Throwable> error  
      private java.lang.Thread thread  
    • Constructor Summary

      Constructors 
      Constructor Description
      RunnableErrorForwarder()
      Creates a new error forwarder for worker threads spawned by the current thread.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void await()
      Causes the current thread to wait until all previously wrapped runnables have terminated and potentially re-throws an uncaught RuntimeException or Error from any of the runnables.
      private void awaitTerminationOfAllRunnables()  
      java.lang.Runnable wrap​(java.lang.Runnable runnable)
      Wraps the specified runnable into an equivalent runnable that will allow forwarding of uncaught errors.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • thread

        private final java.lang.Thread thread
      • counter

        private final java.util.concurrent.atomic.AtomicInteger counter
      • error

        private final java.util.concurrent.atomic.AtomicReference<java.lang.Throwable> error
    • Constructor Detail

      • RunnableErrorForwarder

        public RunnableErrorForwarder()
        Creates a new error forwarder for worker threads spawned by the current thread.
    • Method Detail

      • wrap

        public java.lang.Runnable wrap​(java.lang.Runnable runnable)
        Wraps the specified runnable into an equivalent runnable that will allow forwarding of uncaught errors.
        Parameters:
        runnable - The runnable from which to forward errors, must not be null.
        Returns:
        The error-forwarding runnable to eventually execute, never null.
      • await

        public void await()
        Causes the current thread to wait until all previously wrapped runnables have terminated and potentially re-throws an uncaught RuntimeException or Error from any of the runnables. In case multiple runnables encountered uncaught errors, one error is arbitrarily selected. Note: This method must be called from the same thread that created this error forwarder instance.
      • awaitTerminationOfAllRunnables

        private void awaitTerminationOfAllRunnables()