java使用ExecutorService时,线程内的类是否安全?
我有一个Runnable类的实现,该类包含一个对象向量,这些对象项被逐个移除并进行处理
使用ExecutorService并创建具有n个线程的newFixedThreadPool,Runnable类的实例是否有n个?如果是这样的话,类和向量是线程安全的,还是需要使用synchronized来实现
谢谢
你可以在下面搜索框中键入要查询的问题!
我有一个Runnable类的实现,该类包含一个对象向量,这些对象项被逐个移除并进行处理
使用ExecutorService并创建具有n个线程的newFixedThreadPool,Runnable类的实例是否有n个?如果是这样的话,类和向量是线程安全的,还是需要使用synchronized来实现
谢谢
# 1 楼答案
您使用的是
newFixedThreadPool
,因此这意味着,在任何时候,都有maxn
个线程处于活动状态。如果启动了n
可运行程序,并且所有线程都很忙,那么每个额外的可运行程序都将等待线程可用您的实现在可运行程序之间没有共享资源(至少看起来是这样)。在这种情况下,您不需要同步。但是,例如,如果您有一个vector实例和多个“worker”实例,那么您需要同步
# 2 楼答案
正如其他人所说,如果您在可运行程序之间共享向量,那么它就不是线程安全的。为了线程安全,您应该使用绑定队列(如BlockingQueue)或未绑定队列(如ConcurrentLinkedQueue)而不是Vector