package com.revolsys.swing.parallel; import java.util.Collection; import java.util.LinkedList; import java.util.Queue; public class RunnableSwingWorkerManager { private final String description; private RunnableSwingWorkerProcess process; private final Queue<Runnable> tasks = new LinkedList<>(); public RunnableSwingWorkerManager(final String description) { this.description = description; } public void addTask(final Runnable task) { synchronized (this.tasks) { this.tasks.add(task); if (this.process == null) { this.process = new RunnableSwingWorkerProcess(this); this.process.execute(); } } } public void addTasks(final Collection<Runnable> tasks) { synchronized (this.tasks) { this.tasks.addAll(tasks); if (this.process == null) { this.process = new RunnableSwingWorkerProcess(this); this.process.execute(); } } } public Runnable getNextTask() { synchronized (this.tasks) { final Runnable task = this.tasks.poll(); if (task == null) { this.process = null; } return task; } } public void removeTask(final Runnable task) { synchronized (this.tasks) { this.tasks.remove(task); } } public void removeTasks(final Collection<Runnable> tasks) { synchronized (this.tasks) { this.tasks.removeAll(tasks); } } @Override public String toString() { return this.description; } }