Java Demonstrating how ThreadPoolExecutor can be created with different parameters.  public class ExecutorsPoolEquivalentExamples { public static void main (String[] args) { //equivalent to Executors.newCachedThreadPool() executePool(new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>()), "equivalent to Executors#newCachedThreadPool()");
//equivalent to Executors.newFixedThreadPool(int nThreads) executePool(new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()), "equivalent to Executors#newFixedThreadPool(int nThreads)");
//equivalent to Executors.newSingleThreadExecutor() executePool(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()), "equivalent to Executors#newSingleThreadExecutor()");
}
private static void executePool (ThreadPoolExecutor e, String msg) { System.out.println("---- " + msg + "-------------");
for (int i = 0; i < 10; i++) { try { e.execute(new Task()); } catch (RejectedExecutionException ex) { System.out.println("Task rejected = " + (i + 1)); } printStatus(i + 1, e); }
e.shutdownNow();
System.out.println("--------------------\n"); }
private static void printStatus (int taskSubmitted, ThreadPoolExecutor e) {
StringBuilder s = new StringBuilder(); s.append("poolSize = ") .append(e.getPoolSize()) .append(", corePoolSize = ") .append(e.getCorePoolSize()) .append(", queueSize = ") .append(e.getQueue() .size()) .append(", queueRemainingCapacity = ") .append(e.getQueue() .remainingCapacity()) .append(", maximumPoolSize = ") .append(e.getMaximumPoolSize()) .append(", totalTasksSubmitted = ") .append(taskSubmitted);
System.out.println(s.toString());
}
private static class Task implements Runnable {
@Override public void run () { while (true) { try { Thread.sleep(1000000); } catch (InterruptedException e) { break; } } } } }
Output---- equivalent to Executors#newCachedThreadPool()------------- poolSize = 1, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 1 poolSize = 2, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 2 poolSize = 3, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 3 poolSize = 4, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 4 poolSize = 5, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 5 poolSize = 6, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 6 poolSize = 7, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 7 poolSize = 8, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 8 poolSize = 9, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 9 poolSize = 10, corePoolSize = 0, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 2147483647, totalTasksSubmitted = 10 --------------------
---- equivalent to Executors#newFixedThreadPool(int nThreads)------------- poolSize = 1, corePoolSize = 5, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 1 poolSize = 2, corePoolSize = 5, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 2 poolSize = 3, corePoolSize = 5, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 3 poolSize = 4, corePoolSize = 5, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 4 poolSize = 5, corePoolSize = 5, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 5 poolSize = 5, corePoolSize = 5, queueSize = 1, queueRemainingCapacity = 2147483646, maximumPoolSize = 5, totalTasksSubmitted = 6 poolSize = 5, corePoolSize = 5, queueSize = 2, queueRemainingCapacity = 2147483645, maximumPoolSize = 5, totalTasksSubmitted = 7 poolSize = 5, corePoolSize = 5, queueSize = 3, queueRemainingCapacity = 2147483644, maximumPoolSize = 5, totalTasksSubmitted = 8 poolSize = 5, corePoolSize = 5, queueSize = 4, queueRemainingCapacity = 2147483643, maximumPoolSize = 5, totalTasksSubmitted = 9 poolSize = 5, corePoolSize = 5, queueSize = 5, queueRemainingCapacity = 2147483642, maximumPoolSize = 5, totalTasksSubmitted = 10 --------------------
---- equivalent to Executors#newSingleThreadExecutor()------------- poolSize = 1, corePoolSize = 1, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 1, totalTasksSubmitted = 1 poolSize = 1, corePoolSize = 1, queueSize = 1, queueRemainingCapacity = 2147483646, maximumPoolSize = 1, totalTasksSubmitted = 2 poolSize = 1, corePoolSize = 1, queueSize = 2, queueRemainingCapacity = 2147483645, maximumPoolSize = 1, totalTasksSubmitted = 3 poolSize = 1, corePoolSize = 1, queueSize = 3, queueRemainingCapacity = 2147483644, maximumPoolSize = 1, totalTasksSubmitted = 4 poolSize = 1, corePoolSize = 1, queueSize = 4, queueRemainingCapacity = 2147483643, maximumPoolSize = 1, totalTasksSubmitted = 5 poolSize = 1, corePoolSize = 1, queueSize = 5, queueRemainingCapacity = 2147483642, maximumPoolSize = 1, totalTasksSubmitted = 6 poolSize = 1, corePoolSize = 1, queueSize = 6, queueRemainingCapacity = 2147483641, maximumPoolSize = 1, totalTasksSubmitted = 7 poolSize = 1, corePoolSize = 1, queueSize = 7, queueRemainingCapacity = 2147483640, maximumPoolSize = 1, totalTasksSubmitted = 8 poolSize = 1, corePoolSize = 1, queueSize = 8, queueRemainingCapacity = 2147483639, maximumPoolSize = 1, totalTasksSubmitted = 9 poolSize = 1, corePoolSize = 1, queueSize = 9, queueRemainingCapacity = 2147483638, maximumPoolSize = 1, totalTasksSubmitted = 10 --------------------
Original Post
Showing different queue usage.  public class ThreadPoolExecutorExample {
public static void main (String[] args) { createAndRunPoolForQueue(new ArrayBlockingQueue<>(3), "Bounded"); createAndRunPoolForQueue(new LinkedBlockingDeque<>(), "Unbounded"); createAndRunPoolForQueue(new SynchronousQueue<>(), "Direct hand-off"); }
private static void createAndRunPoolForQueue (BlockingQueue<Runnable> queue, String msg) { System.out.println("---- " + msg + " queue instance = " + queue.getClass() + " " + "-------------");
ThreadPoolExecutor e = new ThreadPoolExecutor(2, 5, Long.MAX_VALUE, TimeUnit.NANOSECONDS, queue); for (int i = 0; i < 10; i++) { try { e.execute(new Task()); } catch (RejectedExecutionException ex) { System.out.println("Task rejected = " + (i + 1)); } printStatus(i + 1, e); }
e.shutdownNow();
System.out.println("--------------------\n"); }
private static void printStatus (int taskSubmitted, ThreadPoolExecutor e) {
StringBuilder s = new StringBuilder(); s.append("poolSize = ") .append(e.getPoolSize()) .append(", corePoolSize = ") .append(e.getCorePoolSize()) .append(", queueSize = ") .append(e.getQueue() .size()) .append(", queueRemainingCapacity = ") .append(e.getQueue() .remainingCapacity()) .append(", maximumPoolSize = ") .append(e.getMaximumPoolSize()) .append(", totalTasksSubmitted = ") .append(taskSubmitted);
System.out.println(s.toString());
}
private static class Task implements Runnable {
@Override public void run () { while (true) { try { Thread.sleep(1000000); } catch (InterruptedException e) { break; }
} } } }
Output---- Bounded queue instance = class java.util.concurrent.ArrayBlockingQueue ------------- poolSize = 1, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 3, maximumPoolSize = 5, totalTasksSubmitted = 1 poolSize = 2, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 3, maximumPoolSize = 5, totalTasksSubmitted = 2 poolSize = 2, corePoolSize = 2, queueSize = 1, queueRemainingCapacity = 2, maximumPoolSize = 5, totalTasksSubmitted = 3 poolSize = 2, corePoolSize = 2, queueSize = 2, queueRemainingCapacity = 1, maximumPoolSize = 5, totalTasksSubmitted = 4 poolSize = 2, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 5 poolSize = 3, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 6 poolSize = 4, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 7 poolSize = 5, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 8 Task rejected = 9 poolSize = 5, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 9 Task rejected = 10 poolSize = 5, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 10 --------------------
---- Unbounded queue instance = class java.util.concurrent.LinkedBlockingDeque ------------- poolSize = 1, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 1 poolSize = 2, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 2147483647, maximumPoolSize = 5, totalTasksSubmitted = 2 poolSize = 2, corePoolSize = 2, queueSize = 1, queueRemainingCapacity = 2147483646, maximumPoolSize = 5, totalTasksSubmitted = 3 poolSize = 2, corePoolSize = 2, queueSize = 2, queueRemainingCapacity = 2147483645, maximumPoolSize = 5, totalTasksSubmitted = 4 poolSize = 2, corePoolSize = 2, queueSize = 3, queueRemainingCapacity = 2147483644, maximumPoolSize = 5, totalTasksSubmitted = 5 poolSize = 2, corePoolSize = 2, queueSize = 4, queueRemainingCapacity = 2147483643, maximumPoolSize = 5, totalTasksSubmitted = 6 poolSize = 2, corePoolSize = 2, queueSize = 5, queueRemainingCapacity = 2147483642, maximumPoolSize = 5, totalTasksSubmitted = 7 poolSize = 2, corePoolSize = 2, queueSize = 6, queueRemainingCapacity = 2147483641, maximumPoolSize = 5, totalTasksSubmitted = 8 poolSize = 2, corePoolSize = 2, queueSize = 7, queueRemainingCapacity = 2147483640, maximumPoolSize = 5, totalTasksSubmitted = 9 poolSize = 2, corePoolSize = 2, queueSize = 8, queueRemainingCapacity = 2147483639, maximumPoolSize = 5, totalTasksSubmitted = 10 --------------------
---- Direct hand-off queue instance = class java.util.concurrent.SynchronousQueue ------------- poolSize = 1, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 1 poolSize = 2, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 2 poolSize = 3, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 3 poolSize = 4, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 4 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 5 Task rejected = 6 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 6 Task rejected = 7 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 7 Task rejected = 8 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 8 Task rejected = 9 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 9 Task rejected = 10 poolSize = 5, corePoolSize = 2, queueSize = 0, queueRemainingCapacity = 0, maximumPoolSize = 5, totalTasksSubmitted = 10 --------------------
Original Post
|
|