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 { private class QueuedTasklet { private Tasklet tasklet; private Object argument; public QueuedTasklet(Tasklet tasklet,Object argument) { this.tasklet = tasklet; this.argument = argument; } } private FiFo queuedTasklets = new FiFo(); public TaskletThread() { start(); } public void queue(Tasklet tasklet,Object arg) { synchronized (queuedTasklets) { queuedTasklets.push(new QueuedTasklet(tasklet,arg)); } queuedTasklets.notify(); } @Override public void run() { while (true) { QueuedTasklet queuedTasklet = null; synchronized (queuedTasklets) { try { queuedTasklets.wait(100); queuedTasklet = queuedTasklets.pull(); } catch (InterruptedException e) { e.printStackTrace(); } } if (queuedTasklet != null) { try { queuedTasklet.tasklet.run(queuedTasklet.argument); } catch (Exception ex) { System.err.println("Tasklet throwed Exception: " + ex.toString()); ex.printStackTrace(); } } if (isInterrupted()) return; } } }