使用ExecutorService时,线程安全中的类是什么?

时间:2016-05-12 15:49:30

标签: java multithreading concurrency executorservice

我有一个Runnable类的实现,它包含一个对象Vector,可以逐个删除项目并进行处理。

使用ExecutorService并创建一个包含n个线程的newFixedThreadPool,Runnable类有多个实例?如果是这样,那些类和线程中的Vector是否安全,或者是否需要使用synchronized?

来实现

由于

2 个答案:

答案 0 :(得分:0)

您正在使用newFixedThreadPool,这意味着,任何时候最大n个线程都处于活动状态。如果你启动n Runnables并且所有线程都忙,那么每个额外的Runnable都会等到线程可用。

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

答案 1 :(得分:0)

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