@Override
		public Object process(K job, TaskMonitor monitor) {
			job.setTaskMonitor(monitor);
			if (job.isCancelled()) {
				monitor.cancel();
				return null;
			}
			try {
				job.run(monitor);
			}
			catch (CancelledException e) {
				// it will be handled above us.
			}
			catch (Throwable t) {
				reportException(t, job, monitor.isCancelled());
			}
			finally {
				job.setTaskMonitor(null);
				if (monitor.isCancelled()) {
					job.cancel();
				}
				else {
					job.setCompleted();
				}
			}
			return null;
		}
Constructs a new Worker with the given name.

@param queue the queue into which jobs will be place (e.g. PriorityBlockingQueue or
             LinkedBlockingQueue).
@param isPersistentThread if true, the worker thread will stay around when idle; false means
            that the thread will go away if not needed. Should be true for high frequency
            usage.
@param name the name of this worker. The thread that executes the jobs will have this name.
@param shareThreadPool true signals to use the given name to find/create a thread pool that
            can be shared throughout the system.
@param monitor the task monitor that allows for cancelling of jobs.
Ghidra/Framework/Generic/src/main/java/ghidra/util/worker/AbstractWorker.java