如何处理 BlockingQueue 的 InterruptedException?

Sab*_*han 5 java concurrency multithreading blockingqueue

我有一个与此类似的代码,它位于run()aRunnable和多个实例的内部方法中Runnable

do{
        try{
            String contractNum=contractNums.take();
           }catch(InterruptedException e){
            logger.error(e.getMessage(), e);
        }
  }while(!("*".equals(contractNum)));
Run Code Online (Sandbox Code Playgroud)

哪里contractNumsBlockingQueue<String>多线程共享的。Runnables这个队列有单独的放置元素。

我不确定捕获后的后续步骤InterruptedException,我应该通过重新抛出 a 来终止该线程RuntimeException(因此我的while循环终止)还是尝试contractNum queue再次获取下一个元素并忽略InterruptedException

我不确定是否InterruptedException被视为线程终止或将其保留在 while 循环中的致命条件。

请建议。

Kay*_*man 3

这取决于。是否有地方故意中断线程,例如告诉它完成(例如在关闭期间)?如果没有,您只需要处理可能会唤醒线程的虚假中断。如果您不想影响处理,请忽略它们。它们绝对不是致命的异常,并且您不需要记录它们(尤其是作为错误)。