我有一个Runnable类的实现,它包含一个对象Vector,可以逐个删除项目并进行处理。
使用ExecutorService并创建一个包含n个线程的newFixedThreadPool,Runnable类有多个实例?如果是这样,那些类和线程中的Vector是否安全,或者是否需要使用synchronized?
来实现由于
答案 0 :(得分:0)
您正在使用newFixedThreadPool
,这意味着,任何时候最大n
个线程都处于活动状态。如果你启动n
Runnables并且所有线程都忙,那么每个额外的Runnable都会等到线程可用。
您的实现在runnables之间没有共享资源(至少看起来像这样)。在这种情况下,您不需要同步。但是,例如,如果你有一个vector实例和'worker'的多个实例,那么你需要同步。
答案 1 :(得分:0)
正如其他人所说,如果你在Runnables上共享你的Vector,那么它不是线程安全的。要线程安全,您应该使用绑定队列(如BlockingQueue)或未绑定队列(如ConcurrentLinkedQueue)而不是Vector。