java-org.hwo/src/org/hwo/tasklet/TaskletThread.java

71 lines
1.2 KiB
Java

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<QueuedTasklet> queuedTasklets = new FiFo<QueuedTasklet>();
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;
}
}
}