java thead池执行程序如何处理中断的线程

沙米克:

我创建了一个ThreadPool带有10个固定线程的线程。有时我需要中断线程池中一个正在运行的线程,主要是因为它们在某些操作中被阻塞并且发生超时,所以我中断了该线程。我赶上了InterruptedException,并将线程的状态也设置为中断。在那种情况下,我的问题是,是否ThreadPool创建一个新的线程并将被中断的线程替换为一个新的线程?以下是由线程执行的示例代码。问题是,当该线程被中断时,线程池是否用新线程替换了该线程?

 public ResponseMessage call(){
    Future<ResponseMessage> future = CacheManager.getInstance().asyncFetch();
    ResponseMessage response = null;
    try {
        response = future.get();
    }
    catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    } catch (ExecutionException ex) {
        //create a blank response
    }

    return response;
}
埃里克森:

您不应该中断不属于您的线程,因为您不知道它们如何响应。由于您无法控制线程调度,因此您实际上不知道给定线程在中断特定任务时正在执行特定任务

如果您想取消已赋予执行者服务的任务,请调用cancel(true)与之相关的Future当您的任务检测到中断请求时,应通过调用来保留中断状态Thread.currentThread().interrupt()

如果执行此操作,则执行程序将干净地处理该中断,因为它会中断线程本身,并且知道中断发生时该线程正在执行任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章