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)
哪里contractNums是BlockingQueue<String>多线程共享的。Runnables这个队列有单独的放置元素。
我不确定捕获后的后续步骤InterruptedException,我应该通过重新抛出 a 来终止该线程RuntimeException(因此我的while循环终止)还是尝试contractNum queue再次获取下一个元素并忽略InterruptedException?
我不确定是否InterruptedException被视为线程终止或将其保留在 while 循环中的致命条件。
请建议。
这取决于。是否有地方故意中断线程,例如告诉它完成(例如在关闭期间)?如果没有,您只需要处理可能会唤醒线程的虚假中断。如果您不想影响处理,请忽略它们。它们绝对不是致命的异常,并且您不需要记录它们(尤其是作为错误)。