将TimerTask中的异常抛出到另一个方法

时间:2013-11-05 17:49:34

标签: java exception timer timertask

我想将以下异常抛给另一个方法,但我不知道如何正确实现这一点。

  public void startTimeoutHandler() throws TimeoutException
  {
    timer = new Timer();
    timerTask = new TimerTask()
    {
      @Override
      public void run()
      {
        throw new TimeoutException();        
      }
    };
  }

谢谢!

2 个答案:

答案 0 :(得分:3)

  • TimerTask实际上是Runnable的实现,这是一个相当有限的抽象; run()无法返回值或抛出已检查的异常。

  • 使用Callable<V>:它也是为其实例可能由另一个线程执行但不像Runnable的类而设计的,它的call()方法可以返回结果并且 throw检查异常

    class MyTask implements Callable<Integer>{
    
      @Override
      public Integer call() throws TimeoutException{
        throw new TimeoutException(); 
      }
    }
    
    void usingCallable(MyTask e) {
        e.call(); // error: must catch Exception
    }
    
  • 用于调度任务ScheduledThreadPoolExecutor:一种ExecutorService,可以调度命令在给定的延迟后运行,或定期执行。它有一个很好的功能:

     <V> ScheduledFuture<V>  schedule(Callable<V> callable, long delay, TimeUnit unit)
    

答案 1 :(得分:0)

据我了解,您希望通过在其中抛出异常来中断另一个线程执行。这是不可能的。干扰Java中另一个线程执行的唯一方法是中断它。