// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.core.pipeline.common; /** * A thread implementation for launching a runnable task. * * @author Brett Henderson */ public class TaskRunner extends Thread { /** * Becomes false if an uncaught exception occurs within the task * implementation. */ private boolean successful; /** * Contains the uncaught exception (if any) that has occurred within the * task implementation. */ private Throwable exception; /** * Creates a new instance. * * @param task * The task to be executed. * @param name * The name of the thread. */ public TaskRunner(Runnable task, String name) { super(task, name); successful = true; // Set an exception handler to capture the details of any failure. setUncaughtExceptionHandler( new UncaughtExceptionHandler() { @SuppressWarnings("synthetic-access") public void uncaughtException(Thread t, Throwable e) { successful = false; exception = e; } } ); } /** * This can be called after the thread has completed to determine if the * thread terminated normally. * * @return True if the thread terminated normally. */ public boolean isSuccessful() { return successful; } /** * Returns the reason for abnormal termination. * * @return The exception causing the failure. */ public Throwable getException() { return exception; } }