Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 异常时停止ThreadPoolTaskExecutor_Java_Multithreading_Spring - Fatal编程技术网

Java 异常时停止ThreadPoolTaskExecutor

Java 异常时停止ThreadPoolTaskExecutor,java,multithreading,spring,Java,Multithreading,Spring,当抛出未捕获的异常时,是否可以停止org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor,以及如何执行 例如,当抛出MyCustomException时,我希望停止线程并在主线程中捕获异常: taskExecutor.execute(new Runnable() { @Override public void run() { try { int i = 1/0;

当抛出未捕获的异常时,是否可以停止org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor,以及如何执行

例如,当抛出
MyCustomException
时,我希望停止线程并在主线程中捕获异常:

taskExecutor.execute(new Runnable() {
    @Override
    public void run() {
        try {
            int i = 1/0;
        } catch (Exception e) {
            throw new MyCustomException(e);
        }
    }
});

由于您使用的是匿名内部类,这就足够了:

taskExecutor.execute(new Runnable() {
    @Override
    public void run() {
        try {
            int i = 1/0;
        } catch (Exception e) {
            onExceptionInTask( new MyCustomException(e) ); // <== Inform main.
        }
    }
});

你为什么要阻止遗嘱执行人?这将使所有使用该执行器的操作停止,甚至可能破坏您的应用程序。您可以使用回调。为Runnable提供对所需处理程序的引用,并对其调用方法。
protected void onExceptionInTask( MyCustomException e ){
    // do your thing like stop all tasks ... 
}