public synchronized void enqueue(Task task) { queue.add(task); if (runner == null) { runnerRunning = true; runner = new Runner(this); runner.setDaemon(true); runner.start(); } else if (!runnerRunning) { runnerRunning = true; notifyAll(); } }