如果任務已經啟動,isStarted()方法將返回true:
public synchronized boolean isStarted() {
return started;
}
如果任務已經完成,isCompleted()方法將返回true:
public synchronized boolean isCompleted() {
return counter == 100;
}
如果任務正在運行,isRunning()方法將返回true:
public synchronized boolean isRunning() {
return running;
}
SetRunning()方法由start.jsp或stop.jsp調用,當running參數是true時。SetRunning()方法還要將任務標記為“已經啟動”。調用setRunning(false)表示要求run()方法停止執行。
public synchronized void setRunning(boolean running) {
this.running = running;
if (running)
started = true;
}
任務執行完畢後,調用getResult()方法返回計算結果;如果任務尚未執行完畢,它返回null:
public synchronized Object getResult() {
if (isCompleted())
return new Integer(sum);
else
return null;
}
當running標記為true、completed標記為false時,run()方法調用work()。在實際應用中,run()方法也許要執行復雜的SQL查詢、解析大型XML文檔,或者調用消耗大量CPU時間的EJB方法。注意“繁重的任務”可能要在遠程服務器上執行。報告結果的JSP頁面有兩種選擇:或者等待任務結束,或者使用一個進度條。
public void run() {
try {
setRunning(true);
while (isRunning() && !isCompleted())
work();
} finally {
setRunning(false);
}
}