@Override public void shutdown() { if (shutdown) { return; } shutdown = true; synchronized (workers) { for (int i = workers.size(); i > 0; i --) { getQueue().offer(EXIT_SIGNAL); } } }
@Override public List<Runnable> shutdownNow() { shutdown(); List<Runnable> answer = new ArrayList<>(); Runnable task; while ((task = getQueue().poll()) != null) { if (task == EXIT_SIGNAL) { getQueue().offer(EXIT_SIGNAL); Thread.yield(); // Let others take the signal. continue; } getQueueHandler().polled(this, (IoEvent) task); answer.add(task); } return answer; }
@Override public void shutdown() { if (shutdown) { return; } shutdown = true; synchronized (workers) { for (int i = workers.size(); i > 0; i--) { getQueue().offer(EXIT_SIGNAL); } } }
@Override public List<Runnable> shutdownNow() { shutdown(); List<Runnable> answer = new ArrayList<>(); Runnable task; while ((task = getQueue().poll()) != null) { if (task == EXIT_SIGNAL) { getQueue().offer(EXIT_SIGNAL); Thread.yield(); // Let others take the signal. continue; } getQueueHandler().polled(this, (IoEvent) task); answer.add(task); } return answer; }
private void removeWorker() { synchronized (workers) { if (workers.size() <= corePoolSize) { return; } getQueue().offer(EXIT_SIGNAL); } }
@Override public List<Runnable> shutdownNow() { shutdown(); List<Runnable> answer = new ArrayList<>(); Runnable task; while ((task = getQueue().poll()) != null) { if (task == EXIT_SIGNAL) { getQueue().offer(EXIT_SIGNAL); Thread.yield(); // Let others take the signal. continue; } getQueueHandler().polled(this, (IoEvent) task); answer.add(task); } return answer; }
@Override public void shutdown() { if (shutdown) { return; } shutdown = true; synchronized (workers) { for (int i = workers.size(); i > 0; i--) { getQueue().offer(EXIT_SIGNAL); } } }
private void removeWorker() { synchronized (workers) { if (workers.size() <= corePoolSize) { return; } getQueue().offer(EXIT_SIGNAL); } }
private void removeWorker() { synchronized (workers) { if (workers.size() <= corePoolSize) { return; } getQueue().offer(EXIT_SIGNAL); } }
private Runnable fetchTask() { Runnable task = null; long currentTime = System.currentTimeMillis(); long deadline = currentTime + getKeepAliveTime(TimeUnit.MILLISECONDS); for (;;) { try { long waitTime = deadline - currentTime; if (waitTime <= 0) { break; } try { task = getQueue().poll(waitTime, TimeUnit.MILLISECONDS); break; } finally { if (task == null) { currentTime = System.currentTimeMillis(); } } } catch (InterruptedException e) { // Ignore. continue; } } return task; }
private Runnable fetchTask() { Runnable task = null; long currentTime = System.currentTimeMillis(); long deadline = currentTime + getKeepAliveTime(TimeUnit.MILLISECONDS); for (;;) { try { long waitTime = deadline - currentTime; if (waitTime <= 0) { break; } try { task = getQueue().poll(waitTime, TimeUnit.MILLISECONDS); break; } finally { if (task == null) { currentTime = System.currentTimeMillis(); } } } catch (InterruptedException e) { // Ignore. continue; } } return task; }
private Runnable fetchTask() { Runnable task = null; long currentTime = System.currentTimeMillis(); long deadline = currentTime + getKeepAliveTime(TimeUnit.MILLISECONDS); for (;;) { try { long waitTime = deadline - currentTime; if (waitTime <= 0) { break; } try { task = getQueue().poll(waitTime, TimeUnit.MILLISECONDS); break; } finally { if (task == null) { currentTime = System.currentTimeMillis(); } } } catch (InterruptedException e) { // Ignore. continue; } } return task; }
@Override public void execute(Runnable task) { if (shutdown) { rejectTask(task); } checkTaskType(task); IoEvent e = (IoEvent) task; boolean offeredEvent = queueHandler.accept(this, e); if (offeredEvent) { getQueue().offer(e); } addWorkerIfNecessary(); if (offeredEvent) { queueHandler.offered(this, e); } }
@Override public void execute(Runnable task) { if (shutdown) { rejectTask(task); } checkTaskType(task); IoEvent e = (IoEvent) task; boolean offeredEvent = queueHandler.accept(this, e); if (offeredEvent) { getQueue().offer(e); } addWorkerIfNecessary(); if (offeredEvent) { queueHandler.offered(this, e); } }
@Override public void execute(Runnable task) { if (shutdown) { rejectTask(task); } checkTaskType(task); IoEvent e = (IoEvent) task; boolean offeredEvent = queueHandler.accept(this, e); if (offeredEvent) { getQueue().offer(e); } addWorkerIfNecessary(); if (offeredEvent) { queueHandler.offered(this, e); } }