2010-08-10 269 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

相关问题