Java ExecutorCompletionService线程安全吗?

Java ExecutorCompletionService线程安全吗?,java,multithreading,java.util.concurrent,blockingqueue,Java,Multithreading,Java.util.concurrent,Blockingqueue,我了解ExecutorCompletionService依赖于BlockingQueue实现线程安全: 从BlockingQueueJavaDoc: BlockingQueue实现是线程安全的。所有排队方法 使用内部锁或其他形式以原子方式实现其效果 并发控制的实现 但是,ExecutorCompletionService有一个构造函数,它接受阻塞队列的任意实现,这可能不是线程安全的 这是否会使ExecutorCompletionService因线程不安全而受损?任何BLockingQueue的实

我了解
ExecutorCompletionService
依赖于
BlockingQueue
实现线程安全:

BlockingQueue
JavaDoc:

BlockingQueue实现是线程安全的。所有排队方法 使用内部锁或其他形式以原子方式实现其效果 并发控制的实现

但是,
ExecutorCompletionService
有一个构造函数,它接受
阻塞队列
的任意实现,这可能不是线程安全的


这是否会使
ExecutorCompletionService
因线程不安全而受损?

任何BLockingQueue的实现都必须遵守javadoc的约定。如果它没有这样做,那么反过来,ExecutorCompletionService也可能因此失败。但更广泛地说,如果你开始认为实现没有遵守他们的契约,那么他们会说你的CPU、RAM、OS、JVM、java.lang.Thread,或者任何实际可行的东西。。。doc说“阻塞队列是线程安全的”。如果它们不是,那就是它们的bug,而不是ExecutorCompletionServce。只有在不调用“外来方法”(JCIP)的情况下,线程安全才适用。如果不知道传入的是什么,则无法知道代码是否是线程安全的。如果这是您所处的场景,那么这将是实现者的错误,而不是Java的错误(如果您不是该代码的作者,也可能是您自己的错误)。