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

68 lines
1.2 KiB
Java

package org.hwo.tasklet;
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;
}
}
}
}