清除可运行对象的ArrayList时会发生什么?

Sna*_*det 1 java

假设您有个ArrayList实现该Runnable接口的对象。如果调用这些对象会发生什么ArrayList.clear()?他们会完成他们的run()方法吗?

这是线程安全的操作吗?如果不是,什么是线程安全替代方案?

Sea*_*ght 7

调用ArrayList.clear()对其所包含的对象没有任何影响。它只是删除对这些对象的引用。它不是线程安全操作,ArrayList也不是线程安全集合。

每当更改ArrayListsynchronized或其中一种Lock实现)状态时,都可以使用适当的锁定,可以包装ArrayListusing Collections.synchronizedList(),也可以切换到诸如的线程安全集合CopyOnWriteArrayList