@Override public void run() { if (tasks.isEmpty()) return; int shopsProcessed = 0; while (shopsProcessed < shopsPerTick) { SearchTask task = tasks.pollLast(); if (task == null) break; shopsProcessed += task.run(shopsPerTick - shopsProcessed); if (task.isFinished()) { task.onComplete(); } else { tasks.push(task); } } }