package org.hwo.tasklet; import java.util.LinkedList; import java.util.List; import java.util.Stack; import org.hwo.fifo.FiFo; public class TaskletThread extends Thread { TaskletManager manager; Tasklet currentTasklet; public TaskletThread(TaskletManager manager) { this.manager = manager; this.currentTasklet = null; start(); } public Tasklet getCurrentTasklet() { return currentTasklet; } private void removeFromManager(){ manager.removeTaskletThread(this); } @Override public void run() { while (true) { Tasklet tasklet = manager.pop(); while (tasklet != null){ tasklet.setStarted(true); manager.fireTaskletStarted(tasklet); currentTasklet = tasklet; try { tasklet.run(); } catch (Exception e){ System.err.println("Tasklet threw Exception:"); e.printStackTrace(); } currentTasklet = null; tasklet.setStarted(false); manager.fireTaskletFinished(tasklet); tasklet = manager.pop(); } synchronized (manager) { try { if (manager.getThreadPoolSize() > manager.getThreads()){ removeFromManager(); return; } manager.wait(); } catch (InterruptedException ex){ ex.printStackTrace(); } } if (manager.isShuttingDown()){ removeFromManager(); return; } } } }