forked from LupusNobilis/java-org.hwo
71 lines
1.2 KiB
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;
|
|
}
|
|
}
|
|
|
|
|
|
}
|