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