猿问

弹簧线程中断

我有一个简单的弹簧控制器,它等待完成一些动作。假设它看起来像下面这样:


@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?


慕慕森
浏览 70回答 1
1回答

扬帆大鱼

不要中断您不知道后果的线程。可以对您创建、启动并且知道副作用是什么的线程执行此操作。
随时随地看视频慕课网APP

相关分类

Java
我要回答