public static void main(String[] args) throws Exception { try { lock = new Object(); if (args.length > 0) { NUM = Integer.parseInt(args[0]); } execs = Executors.newFixedThreadPool(5); httpServer = createHttpServer(execs); port = httpServer.getAddress().getPort(); pool = Executors.newFixedThreadPool(10); httpServer.start(); for (int i = 0; i < NUM; i++) { pool.execute(new Client()); if (error) { throw new Exception("error in test"); } } System.out.println("Main thread waiting"); pool.shutdown(); long latest = System.currentTimeMillis() + 200 * 1000; while (System.currentTimeMillis() < latest) { if (pool.awaitTermination(2000L, TimeUnit.MILLISECONDS)) { System.out.println("Main thread done!"); return; } if (error) { throw new Exception("error in test"); } } throw new Exception("error in test: timed out"); } finally { httpServer.stop(0); pool.shutdownNow(); execs.shutdownNow(); } }