假设您有ArrayList
个对象实现了Runnable
接口。如果调用ArrayList.clear()
,这些对象会怎样?他们会完成他们的run()
方法吗?
这是线程安全操作吗?如果没有,什么是线程安全替代方案?
答案 0 :(得分:6)
调用ArrayList.clear()
对其所包含的对象没有任何影响。它只是删除对这些对象的引用。这不是线程安全操作,因为set
不是线程安全集合。
只要更改ArrayList
(ArrayList
或Lock
实现之一)的状态,就可以使用适当的锁定,也可以使用{{ 3}},也可以切换到线程安全集合,例如Collections.synchronizedList()
。