我上了SomeService
类。可以从不同线程(例如,从RestController)调用其方法。
此类包含ExecutorService
和一些CustomClass
。
public class SomeService {
private ExecutorService service;
private CustomClass customClass;
public SomeService(ExecutorService service, CustomClass customClass){
this.service = service;
this.customClass = customClass;
}
public void servicePost() {
CountDownLatch countDownLatch = new CountDownLatch(urls.size());
for (String url : List<String> urls){
service.submit(() -> {
customClass.send(url);
countDownLatch.countDown();
});
}
countDownLatch.await();
}
}
我想使用customClass.send(url)
在不同的线程中并行执行ExecutorService
,但是此方法可以抛出RuntimeException
。
例如,我提交了5个任务:
1. 2个任务成功执行
2. 2个任务正在运行。
3.其中之一引发RuntimeException。
如何中断正在运行的任务?
点。 ExecutorService可以具有其他线程中的任务。我不想打扰他们。
答案 0 :(得分:2)
当您捕获到异常时,可以在执行程序服务上调用shutdownNow()
,在处理之前,您还需要在任务内部检查Thread#interrupted()
。您的代码应如下所示:
service.submit(() -> {
if (!Thread.interrupted()) {
try {
customClass.send(url);
countDownLatch.countDown();
} catch (Exception e) {
service.shutdownNow();
}
}
});