使用 ExecutorService 时,类 是线程安全的吗?

When using ExecutorService, are the classes within threadsafe?

我有一个 Runnable class 的实现,它包含一个 Vector 对象,这些对象被逐一删除并处理。

使用ExecutorService 并创建一个具有n 个线程的newFixedThreadPool,是否有n 个Runnable 实例class?如果是这样,classes 和 Vector 是线程安全的,还是需要使用同步来实现?

谢谢

您正在使用 newFixedThreadPool,这意味着在任何时候最多 n 个线程处于活动状态。如果您启动 n 个 Runnables 并且所有线程都处于忙碌状态,则每个额外的 Runnable 都将等待直到一个线程可用。

您的实现在可运行对象之间没有共享资源(至少看起来是这样)。在这种情况下,您不需要同步。但是,例如,如果您有一个 vector 实例和多个 'workers' 实例,那么您需要同步。

正如其他人所说,如果您在 Runnable 之间共享 Vector,那么它不是线程安全的。为了线程安全,您应该使用绑定队列(如 BlockingQueue)或未绑定队列(如 ConcurrentLinkedQueue)而不是 Vector。