4

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

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

谢谢!

4

2 回答 2

5
  • ATimerTask实际上Runnable是一个相当有限的抽象的实现;run()不能返回值或抛出检查异常。

  • use Callable<V>: 这也是为实例可能由另一个线程执行的类设计的,但与它不同Runnable的是,它的call()方法可以返回结果并抛出检查的异常

    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)
    
于 2013-11-05T18:01:14.247 回答
0

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

于 2013-11-05T18:08:59.873 回答