这是我的作业问题之一:
在多线程程序上使用链表有什么问题,有什么替代方法?
我回答如下,如果有任何其他建议,我将不胜感激:
问题是缺乏并发性——为了使用链表,我们必须对它使用锁,以便对它所持有的内部对象所做的更改是可靠的(因为每个对象都持有对下一个对象的引用),一次我们锁定链表我们基本上是“关闭”多个线程使用它的选项,替代方案是一个数组,因为我们可以单独锁定每个项目。
我完全不确定我的答案,有什么建议吗?...
这是我的作业问题之一:
在多线程程序上使用链表有什么问题,有什么替代方法?
我回答如下,如果有任何其他建议,我将不胜感激:
问题是缺乏并发性——为了使用链表,我们必须对它使用锁,以便对它所持有的内部对象所做的更改是可靠的(因为每个对象都持有对下一个对象的引用),一次我们锁定链表我们基本上是“关闭”多个线程使用它的选项,替代方案是一个数组,因为我们可以单独锁定每个项目。
我完全不确定我的答案,有什么建议吗?...
你的答案看起来不错。
如果迭代远远超过突变,则替代方案可能是CopyOnWriteArrayList
(假设 a 就足够了)。List
Java SE 中没有 LinkedList 的线程安全版本,但您可以使用 Collections.synchronizedList(List) 创建 LinkedList 的同步代理。还有一个无锁线程安全的 java.util.concurrent.CopyOnWriteArrayList 但它是基于数组的,从它的名字可以看出。