【问题标题】:Linked list problems on multithreaded program多线程程序的链表问题
【发布时间】:2013-04-05 11:43:57
【问题描述】:

这是我的作业问题之一:

在多线程程序中使用链表有什么问题,有什么替代方案?

我的回答如下,如果有任何其他建议,我将不胜感激:

问题在于缺乏并发性——为了使用链表,我们必须对它使用锁,以便对其持有的内部对象所做的更改是可靠的(因为每个对象都持有对下一个对象的引用),一旦我们锁定了链表,我们基本上是在“关闭”多个线程使用它的选项,另一种选择是数组,因为我们可以单独锁定每个项目。

我完全不确定我的答案,有什么建议吗?...

【问题讨论】:

  • 对我来说似乎是一个合法而完整的答案。
  • 我猜你写的就是老师要的。列表中的每个元素都持有对下一个元素的引用,如果多个线程同时向链表添加元素,这些引用可能不会同步

标签: java multithreading linked-list


【解决方案1】:

你的答案看起来不错。

如果迭代远远超过突变,则替代方案可能是 CopyOnWriteArrayList(假设 List 就足够了)。

【讨论】:

    【解决方案2】:

    Java SE 中没有 LinkedList 的线程安全版本,但您可以使用 Collections.synchronizedList(List) 创建 LinkedList 的同步代理。还有一个无锁线程安全的 java.util.concurrent.CopyOnWriteArrayList 但它是基于数组的,从它的名字可以看出。

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多