package com.limegroup.gnutella.util; import com.limegroup.gnutella.ErrorService; /** * A ManagedThread, always reporting errors to the ErrorService. * * If passing a Runnable, use as: * Thread t = new ManagedThread(myRunnable); * t.start(); * * If extending, extend the managedRun() method instead of run(). */ public class ManagedThread extends Thread { /** * Constructs a ManagedThread with no target. */ public ManagedThread() { super(); setPriority(Thread.NORM_PRIORITY); } /** * Constructs a ManagedThread with the specified target. */ public ManagedThread(Runnable r) { super(r); setPriority(Thread.NORM_PRIORITY); } /** * Constructs a ManagedThread with the specified name. */ public ManagedThread(String name) { super(name); setPriority(Thread.NORM_PRIORITY); } /** * Constructs a ManagedThread with the specified target and name. */ public ManagedThread(Runnable r, String name) { super(r, name); setPriority(Thread.NORM_PRIORITY); } /** * Runs the target, reporting any errors to the ErrorService. */ public final void run() { try { managedRun(); } catch(Throwable t) { ErrorService.error(t, "Uncaught thread error."); } } /** * If a target exists, runs the target. Otherwise this method must * be extended to do anything. */ protected void managedRun() { super.run(); } }