--- /dev/null
+// Use with "nc localhost 8080 < /dev/null"
+// Idle threads are parked by the jsr166 framework and caused lots of CPU usage
+// before the addition of park/unpark to CACAO.
+
+import java.net.*;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.net.InetSocketAddress;
+
+public class threadpooltest {
+ private static final int NTHREADS = 3;
+ private static final Executor exec = Executors.newFixedThreadPool(NTHREADS);
+
+ private static void handleRequest(Socket s) {
+ String ss = "hello";
+ try {
+ if (Thread.currentThread().isInterrupted())
+ ss += " (wasinterrupted)";
+ ss += " " + Thread.currentThread().toString();
+ PrintWriter pw = new PrintWriter(s.getOutputStream());
+ //Thread.currentThread().interrupt();
+ pw.println(ss);
+ pw.flush();
+ Thread.sleep(100);
+ pw.println("closing");
+ pw.flush();
+ s.close();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) throws IOException {
+ ServerSocket socket = new ServerSocket();
+ socket.setReuseAddress(true);
+ socket.bind(new InetSocketAddress(8080));
+ while (true) {
+ final Socket connection = socket.accept();
+ Runnable task = new Runnable() {
+ public void run() {
+ handleRequest(connection);
+ }
+ };
+ exec.execute(task);
+ }
+ }
+}