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