Thibstars icon

NotifyingThread

Thibstars | PRO | 11/15/16 01:12:00 PM UTC | 0 ⭐ | 289 👁️ | Never ⏰ | []
Java |

1.32 KB

|

None

|

0 👍

/

0 👎

import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
 
/**
 * Thread notifying when it is done running.
 *
 * @author Thibault Helsmoortel
 */
public abstract class NotifyingThread extends Thread {
 
    private final Set<ThreadCompleteListener> listeners = new CopyOnWriteArraySet<>();
 
    /**
     * Adds a listener to this NotifyingThread.
     *
     * @param listener the listener to add
     */
    public final void addListener(final ThreadCompleteListener listener) {
        listeners.add(listener);
    }
 
    /**
     * Removes a listener from this NotifyingThread.
     *
     * @param listener the listener to remove
     */
    public final void removeListener(final ThreadCompleteListener listener) {
        listeners.remove(listener);
    }
 
    /**
     * Notifies registered listeners.
     */
    private final void notifyListeners() {
        for (ThreadCompleteListener listener : listeners) {
            listener.notifyThreadComplete(this);
        }
    }
 
    @Override
    public final void run() {
        try {
            doRun();
        } finally {
            //Run complete, notify listeners
            notifyListeners();
        }
    }
 
    /**
     * The method to override in stead of the run method.
     */
    public abstract void doRun();
}

Comments