如何在1分钟内完成任务,或者如果没有完成则丢弃它

时间:2012-03-29 09:24:53

标签: java

我正在开发基于Java EE的应用程序,我需要使用itext API进行PDF报告。 基本上我的要求是,如果报告生成时间超过1分钟,则停止它。

因此,我正以这种方式实施此业务要求

Thread t = new Thread(myPojoclass); 

long startTime = System.currentTimeMillis();
long endTime = startTime + 60000;

t.start();

while (System.currentTimeMillis() < endTime) 
{

}

t.interrupt();  // Tell the thread to stop

如上所述,在我的myPojoclass内,这是一个实现Runnable接口的Thread,在其run方法中,它包含连接到Database 并获得结果并将其提供给ArrayList

如果这是正确的,请告诉我?

2 个答案:

答案 0 :(得分:2)

有一个很好的解决方案here。由于您的线程正在连接到数据库,我强烈建议(如果您尚未执行此操作)捕获InterruptException异常,并在其块内关闭连接并在必要时回滚。

答案 1 :(得分:0)

您可以使用执行者服务

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); 
 final Future handler = executor.submit(new Callable(){ ... });
 executor.schedule(new Runnable(){
     public void run(){
         handler.cancel();
     }      
 }, 60000, TimeUnit.MILLISECONDS);

更多细节 ExecutorService that interrupts tasks after a timeout