private void jobDone() {

		// This synchronized is not needed, as this method is only called from within a 
		// synchronized block.  But, it feels better to be explicit here to signal that 
		// synchronization is needed.  
		synchronized (addRemoveUpdater) {

			boolean isCancelled = monitor.isCancelled();
			if (isCancelled) {
				Swing.runLater(notifyCancelled);
			}
			else {
				Swing.runLater(notifyDone);
			}

			thread = null;
			if (!addRemoveWaitList.isEmpty()) {
				Swing.runLater(notifyPending);
			}
		}
	}
Called when the current jobs has been completed.  It notifies the listener, clears the
thread variable, and checks if any add/removes are pending, in which case it set the state
to work pending.
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/ThreadedTableModelUpdateMgr.java