有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ExecutorService时,线程内的类是否安全?

我有一个Runnable类的实现,该类包含一个对象向量,这些对象项被逐个移除并进行处理

使用ExecutorService并创建具有n个线程的newFixedThreadPool,Runnable类的实例是否有n个?如果是这样的话,类和向量是线程安全的,还是需要使用synchronized来实现

谢谢


共 (2) 个答案

  1. # 1 楼答案

    您使用的是newFixedThreadPool,因此这意味着,在任何时候,都有maxn个线程处于活动状态。如果启动了n可运行程序,并且所有线程都很忙,那么每个额外的可运行程序都将等待线程可用

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

  2. # 2 楼答案

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