2010-08-10 266 views
2

我已實現了以下類保持的執行算法創建一個線程用於計時,並重新啓動另一個線程

public class MyTimer extends Thread{ 

    long timeElapsed = 0; 

    public MyTimer(String parameters){ 
     //initilise staff 
    } 

    pubic void run(){ 
     long startTime = System.currentTimeMillis(); 

     //DO SOME THINGS THAT TAKE TIME 

     timeElapsed = System.currentTimeMillis() - startTime; 
     System.out.println("time elapsed = " + timeElapsed"); 

    } 
} 

有些時候爲myTimer做所需要的時間軌跡花費還真不少時間,所以我想創建另一個類來控制它。如果MyTimer在30秒內還沒有完成,那麼我想停止線程並用新參數重新啓動它。如果它在不到30秒內完成,那麼我希望能夠存儲timeElapsed並再次重新啓動MyTimer。 雖然這將是簡單的,但我已經搞砸了線程池timeCountLathces和監控異常.....所以,有什麼辦法我可以做到這一點工作?替代解決方案是運行我的500個測試一個手動的....

預先感謝您

回答

2

大概是讓您的生活困難的是,你必須找出如何,你打算中斷的問題你長時間運行的一段代碼?如果它在一個本身很短的循環中(即頻繁循環),那麼你可以在循環中進行檢查以決定是停止還是繼續。這將是理想的。但是,如果長時間運行的任務正在關閉數據庫,或者單個java語句運行了很長時間,那麼您將不得不嘗試interrupting線程(例如monitoredThread.interrupt())。中斷正在運行的線程可能會導致錯誤被記錄等,但是如果代碼運行良好,中斷將導致它停止執行正在執行的操作並返回。

希望有所幫助。

+0

使用Thread.stop()被depricated但正常工作與我!代碼只是爲了節省我的時間,所以使用stop方法沒有問題。我嘗試過interupt,但它不起作用,因爲它是一個我想停止的recusive功能。我可以在循環中使用檢查,但我不想與其他程序混淆。感謝您的幫助 – Pitelk 2010-08-12 21:34:00

0

你應該考慮只用哈德森運行你的測試/構建。你可以配置你的Hudson版本(你的500個測試)在可定製的時間段後沒有完成時自動超時。

確保您在逐個測試的基礎上沒有得到失敗,因爲每個測試都不會被賦予任意30秒,但您將使用持續積分,這是朝着正確方向邁出的一步。

哈德森大約需要5分鐘下載和安裝:http://hudson-ci.org/

+0

感謝您的答案..我會研究它 – Pitelk 2010-08-12 21:31:52

相關問題