Advertisement
Thibstars

NotifyingThread

Nov 15th, 2016
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.32 KB | None | 0 0
  1. import java.util.Set;
  2. import java.util.concurrent.CopyOnWriteArraySet;
  3.  
  4. /**
  5.  * Thread notifying when it is done running.
  6.  *
  7.  * @author Thibault Helsmoortel
  8.  */
  9. public abstract class NotifyingThread extends Thread {
  10.  
  11.     private final Set<ThreadCompleteListener> listeners = new CopyOnWriteArraySet<>();
  12.  
  13.     /**
  14.      * Adds a listener to this NotifyingThread.
  15.      *
  16.      * @param listener the listener to add
  17.      */
  18.     public final void addListener(final ThreadCompleteListener listener) {
  19.         listeners.add(listener);
  20.     }
  21.  
  22.     /**
  23.      * Removes a listener from this NotifyingThread.
  24.      *
  25.      * @param listener the listener to remove
  26.      */
  27.     public final void removeListener(final ThreadCompleteListener listener) {
  28.         listeners.remove(listener);
  29.     }
  30.  
  31.     /**
  32.      * Notifies registered listeners.
  33.      */
  34.     private final void notifyListeners() {
  35.         for (ThreadCompleteListener listener : listeners) {
  36.             listener.notifyThreadComplete(this);
  37.         }
  38.     }
  39.  
  40.     @Override
  41.     public final void run() {
  42.         try {
  43.             doRun();
  44.         } finally {
  45.             //Run complete, notify listeners
  46.             notifyListeners();
  47.         }
  48.     }
  49.  
  50.     /**
  51.      * The method to override in stead of the run method.
  52.      */
  53.     public abstract void doRun();
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement