我有一个简单的弹簧控制器,它等待一些动作完成。假设它看起来如下所示:
@GetMapping("/wait")
public void waitForFinish() throws InterruptedException {
while (!allJobsAreFinished()) {
Thread.sleep(5000);
}
}现在,出于某种原因,我想在一个单独的请求中中断这个线程。为此,我将正在运行的线程保存到一个映射中,并在一个单独的方法中对其调用.interrupt():
private Map<String, Thread> runningThreads = new ConcurrentHashMap<>();
@GetMapping("/wait")
public void waitForFinish() throws InterruptedException {
Thread currentThread = Thread.currentThread();
runningThreads.put("testId", currentThread);
//...
runningThreads.remove("testId");
}
@GetMapping("/cancel")
public void cancel() {
runningThreads.get("testId").interrupt();
}我的问题是:中断Spring创建的线程是个好主意吗?如果我中断了Spring线程,会出什么问题?或者更好的方法是创建ExecutorService,向它提交我的任务,然后通过Future中断它们
发布于 2019-07-26 17:37:28
不要中断你不知道后果的线程。
它可以为你创建的线程,你启动的线程,并且你知道副作用是什么。
https://stackoverflow.com/questions/57217038
复制相似问题