// threads/EvenChecker.java // (c)2016 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. import java.util.concurrent.*; public class EvenChecker implements Runnable { private IntSupplier generator; private final int id; public EvenChecker(IntSupplier g, int ident) { generator = g; id = ident; } @Override public void run() { while(!generator.isCanceled()) { int val = generator.next(); if(val % 2 != 0) { System.out.println(val + " not even!"); generator.cancel(); // Cancels all EvenCheckers } } } // Test any type of IntSupplier: public static void test(IntSupplier gp, int count) { System.out.println("Press Control-C to exit"); ExecutorService es = Executors.newCachedThreadPool(); for(int i = 0; i < count; i++) es.execute(new EvenChecker(gp, i)); es.shutdown(); } // Default value for count: public static void test(IntSupplier gp) { test(gp, 10); } }