我想将以下异常抛给另一个方法,但我不知道如何正确实现这一点。
public void startTimeoutHandler() throws TimeoutException
{
timer = new Timer();
timerTask = new TimerTask()
{
@Override
public void run()
{
throw new TimeoutException();
}
};
}
谢谢!
答案 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中另一个线程执行的唯一方法是中断它。