import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; class ProfileTest { static final int SLEEPTIME_MS = 2000; public static void main( String[] args) { ExecutorService profiledPool = Executors.newFixedThreadPool(7); ExecutorService notProfiledPool = Executors.newFixedThreadPool(7); profileRoot(profiledPool); noProfileRoot(notProfiledPool); profiledPool.shutdown(); notProfiledPool.shutdown(); try { boolean result = profiledPool.awaitTermination(2*60, TimeUnit.SECONDS); if ( !result ) { System.out.println("Timed out."); } } catch (InterruptedException ex) { System.err.println("Interrupted while waiting for termination."); } try { boolean result = notProfiledPool.awaitTermination(2*60, TimeUnit.SECONDS); if ( !result ) { System.out.println("Timed out."); } } catch (InterruptedException ex) { System.err.println("Interrupted while waiting for termination."); } System.out.println("Fin."); } static void profileRoot(ExecutorService pool) { for (int i=0;i<25;i++) { Runnable r = new MyRunnable(i); pool.execute(r); } } static void noProfileRoot(ExecutorService pool) { for (int i=0;i<25;i++) { Runnable r = new MyNonProfiledRunnable(i); pool.execute(r); } } static void shouldBeProfiled(int id) { try { Thread.currentThread().sleep(SLEEPTIME_MS); System.out.println("P" + id + ": YOU HAD BETTER PROFILE ME, MAN!!!"); } catch (InterruptedException ex) { ex.printStackTrace(); } } static void shouldNotBeProfiled(int id ) { try { Thread.currentThread().sleep(SLEEPTIME_MS); System.out.printf("N" + id + ": DONT PROFILE ME, MAN!!!\n"); } catch (InterruptedException ex) { ex.printStackTrace(); } } private static class MyRunnable implements Runnable { int id = Integer.MIN_VALUE; MyRunnable(int id_) { id = id_; } public void run() { shouldBeProfiled(id); } } private static class MyNonProfiledRunnable implements Runnable { int id = Integer.MIN_VALUE; MyNonProfiledRunnable(int id_) { id = id_; } public void run() { shouldNotBeProfiled(id); } } }