private static synchronized void decrementCount() {
		taskCount--;
		if (taskCount < 0) {
			throw new AssertException("Timer count out of sync.");
		}
		if (taskCount == 0) {
			cleanupTask = new CleanupTimerTask();
			getTimer().schedule(cleanupTask, CLEANUP_TIMER_THREAD_DELAY);	
		}
	}
The GhidraSwinglessTimer is similar to the javax.swing.Timer class.  The big difference is
that it does NOT use the swing thread for its callbacks.  Similar to the swing timer, only 
one timer thread is ever used no matter how many GhidraSwinglessTimers are instantiated.

It fires one or more {@code TimerCallback}s at specified
intervals. 
Setting up a timer
involves creating a <code>GhidraSwinglessTimer</code> object,
registering one or more TimerCallbacks on it,
and starting the timer using
the <code>start</code> method.
Ghidra/Framework/Generic/src/main/java/generic/timer/GhidraSwinglessTimer.java