/** Run the thread. */ @Override public void run() { logger.info("ready, myId = " + myId); Runnable job; int done = 0; long time = 0; long t; boolean running = true; while (running) { try { logger.debug("looking for a job"); job = pool.getJob(); working = true; if (debug) { logger.info("working " + myId + " on " + job); } t = System.currentTimeMillis(); // send and wait, like rmi try { if (job instanceof ShutdownRequest) { ec.send(myId, ExecutableServer.STOP); } else { ec.send(myId, job); } logger.info("send " + myId + " at " + ec + " send job " + job); } catch (IOException e) { e.printStackTrace(); logger.info("error send " + myId + " at " + ec + " e = " + e); working = false; } // job.run(); Object o = null; try { if (working) { logger.info("waiting " + myId + " on " + job); o = ec.receive(myId); logger.info("receive " + myId + " at " + ec + " send job " + job + " received " + o); } } catch (IOException e) { logger.info("receive exception " + myId + " send job " + job + ", " + e); // e.printStackTrace(); running = false; } catch (ClassNotFoundException e) { logger.info("receive exception " + myId + " send job " + job + ", " + e); // e.printStackTrace(); running = false; } finally { logger.info( "receive finally " + myId + " at " + ec + " send job " + job + " received " + o + " running " + running); } working = false; time += System.currentTimeMillis() - t; done++; if (debug) { logger.info("done " + myId + " with " + o); } } catch (InterruptedException e) { running = false; Thread.currentThread().interrupt(); } } logger.info("terminated " + myId + " , done " + done + " jobs in " + time + " milliseconds"); }