private synchronized Poolable getPoolable(Task pTask, boolean pQueue) { if (maxSize != 0 && runningThreads.size() >= maxSize) { if (pQueue) { waitingTasks.add(pTask); } return null; } Poolable poolable; if (waitingThreads.size() > 0) { poolable = (Poolable) waitingThreads.remove(waitingThreads.size()-1); } else { poolable = new Poolable(threadGroup, num++); } runningThreads.add(poolable); return poolable; }
void repool(Poolable pPoolable) { boolean discarding = false; Task task = null; Poolable poolable = null; synchronized (this) { if (runningThreads.remove(pPoolable)) { if (maxSize != 0 && runningThreads.size() + waitingThreads.size() >= maxSize) { discarding = true; } else { waitingThreads.add(pPoolable); if (waitingTasks.size() > 0) { task = (Task) waitingTasks.remove(waitingTasks.size() - 1); poolable = getPoolable(task, false); } } } else { discarding = true; } if (discarding) { remove(pPoolable); } } if (poolable != null) { poolable.start(task); } if (discarding) { pPoolable.shutdown(); } }
public void run() { while (!shuttingDown) { final Task t = getTask(); if (t == null) { try { synchronized (this) { if (!shuttingDown && getTask() == null) { wait(); } } } catch (InterruptedException e) { // Do nothing } } else { try { t.run(); resetTask(); repool(Poolable.this); } catch (Throwable e) { remove(Poolable.this); Poolable.this.shutdown(); resetTask(); } } } } };
public void run() { while (!shuttingDown) { final Task t = getTask(); if (t == null) { try { synchronized (this) { if (!shuttingDown && getTask() == null) { wait(); } } } catch (InterruptedException e) { // Do nothing } } else { try { t.run(); resetTask(); repool(Poolable.this); } catch (Throwable e) { remove(Poolable.this); Poolable.this.shutdown(); resetTask(); } } } } };
void repool(Poolable pPoolable) { boolean discarding = false; Task task = null; Poolable poolable = null; synchronized (this) { if (runningThreads.remove(pPoolable)) { if (maxSize != 0 && runningThreads.size() + waitingThreads.size() >= maxSize) { discarding = true; } else { waitingThreads.add(pPoolable); if (waitingTasks.size() > 0) { task = (Task) waitingTasks.remove(waitingTasks.size() - 1); poolable = getPoolable(task, false); } } } else { discarding = true; } if (discarding) { remove(pPoolable); } } if (poolable != null) { poolable.start(task); } if (discarding) { pPoolable.shutdown(); } }
void repool(Poolable pPoolable) { boolean discarding = false; Task task = null; Poolable poolable = null; synchronized (this) { if (runningThreads.remove(pPoolable)) { if (maxSize != 0 && runningThreads.size() + waitingThreads.size() >= maxSize) { discarding = true; } else { waitingThreads.add(pPoolable); if (waitingTasks.size() > 0) { task = (Task) waitingTasks.remove(waitingTasks.size() - 1); poolable = getPoolable(task, false); } } } else { discarding = true; } if (discarding) { remove(pPoolable); } } if (poolable != null) { poolable.start(task); } if (discarding) { pPoolable.shutdown(); } }
public void run() { while (!shuttingDown) { final Task t = getTask(); if (t == null) { try { synchronized (this) { if (!shuttingDown && getTask() == null) { wait(); } } } catch (InterruptedException e) { // Do nothing } } else { try { t.run(); resetTask(); repool(Poolable.this); } catch (Throwable e) { remove(Poolable.this); Poolable.this.shutdown(); resetTask(); } } } } };
synchronized void shutdown() { shuttingDown = true; final Task t = getTask(); if (t != null && t instanceof InterruptableTask) { try { ((InterruptableTask) t).shutdown(); } catch (Throwable th) { // Ignore me } } task = null; synchronized (thread) { thread.notify(); } } private Task getTask() {
synchronized void shutdown() { shuttingDown = true; final Task t = getTask(); if (t != null && t instanceof InterruptableTask) { try { ((InterruptableTask) t).shutdown(); } catch (Throwable th) { // Ignore me } } task = null; synchronized (thread) { thread.notify(); } } private Task getTask() {
private synchronized Poolable getPoolable(Task pTask, boolean pQueue) { if (maxSize != 0 && runningThreads.size() >= maxSize) { if (pQueue) { waitingTasks.add(pTask); } return null; } Poolable poolable; if (waitingThreads.size() > 0) { poolable = (Poolable) waitingThreads.remove(waitingThreads.size()-1); } else { poolable = new Poolable(threadGroup, num++); } runningThreads.add(poolable); return poolable; }
private synchronized Poolable getPoolable(Task pTask, boolean pQueue) { if (maxSize != 0 && runningThreads.size() >= maxSize) { if (pQueue) { waitingTasks.add(pTask); } return null; } Poolable poolable; if (waitingThreads.size() > 0) { poolable = (Poolable) waitingThreads.remove(waitingThreads.size()-1); } else { poolable = new Poolable(threadGroup, num++); } runningThreads.add(poolable); return poolable; }
synchronized void shutdown() { shuttingDown = true; final Task t = getTask(); if (t != null && t instanceof InterruptableTask) { try { ((InterruptableTask) t).shutdown(); } catch (Throwable th) { // Ignore me } } task = null; synchronized (thread) { thread.notify(); } } private Task getTask() {
/** Adds a task for immediate or deferred execution. * @param pTask The task being added. * @return True, if the task was started immediately. False, if * the task will be executed later. * @deprecated No longer in use. */ public boolean addTask(Task pTask) { final Poolable poolable = getPoolable(pTask, true); if (poolable != null) { poolable.start(pTask); return true; } return false; }
/** Adds a task for immediate or deferred execution. * @param pTask The task being added. * @return True, if the task was started immediately. False, if * the task will be executed later. * @deprecated No longer in use. */ public boolean addTask(Task pTask) { final Poolable poolable = getPoolable(pTask, true); if (poolable != null) { poolable.start(pTask); return true; } return false; }
/** Starts a task immediately. * @param pTask The task being started. * @return True, if the task could be started immediately. False, if * the maxmimum number of concurrent tasks was exceeded. If so, you * might consider to use the {@link #addTask(ThreadPool.Task)} method instead. */ public boolean startTask(Task pTask) { final Poolable poolable = getPoolable(pTask, false); if (poolable == null) { return false; } poolable.start(pTask); return true; }
/** Starts a task immediately. * @param pTask The task being started. * @return True, if the task could be started immediately. False, if * the maxmimum number of concurrent tasks was exceeded. If so, you * might consider to use the {@link #addTask(ThreadPool.Task)} method instead. */ public boolean startTask(Task pTask) { final Poolable poolable = getPoolable(pTask, false); if (poolable == null) { return false; } poolable.start(pTask); return true; }
/** Closes the pool. */ public synchronized void shutdown() { while (!waitingThreads.isEmpty()) { Poolable poolable = (Poolable) waitingThreads.remove(waitingThreads.size()-1); poolable.shutdown(); } while (!runningThreads.isEmpty()) { Poolable poolable = (Poolable) runningThreads.remove(runningThreads.size()-1); poolable.shutdown(); } }
/** Adds a task for immediate or deferred execution. * @param pTask The task being added. * @return True, if the task was started immediately. False, if * the task will be executed later. * @deprecated No longer in use. */ public boolean addTask(Task pTask) { final Poolable poolable = getPoolable(pTask, true); if (poolable != null) { poolable.start(pTask); return true; } return false; }
/** Starts a task immediately. * @param pTask The task being started. * @return True, if the task could be started immediately. False, if * the maxmimum number of concurrent tasks was exceeded. If so, you * might consider to use the {@link #addTask(ThreadPool.Task)} method instead. */ public boolean startTask(Task pTask) { final Poolable poolable = getPoolable(pTask, false); if (poolable == null) { return false; } poolable.start(pTask); return true; }
/** Closes the pool. */ public synchronized void shutdown() { while (!waitingThreads.isEmpty()) { Poolable poolable = (Poolable) waitingThreads.remove(waitingThreads.size()-1); poolable.shutdown(); } while (!runningThreads.isEmpty()) { Poolable poolable = (Poolable) runningThreads.remove(runningThreads.size()-1); poolable.shutdown(); } }