当前位置: 首页 > 面试题库 >

Java中的无锁并发链接列表

萧越泽
2023-03-14
问题内容

我想用一个链表像中描述的这个文件。但是,我在网络上找不到任何Java实现。

如果上述链接列表的java实现不存在,我想我会使用java.util.concurrent.ConcurrentLinkedQueue<E>。这是一个不错的选择(它实际上不是链接列表)吗?

如果不是一个好的选择,那么有人知道Java中可靠的并发(线程安全)无等待(无锁)链接列表实现吗?


问题答案:

ConcurrentLinkedQueue是一个极好的无锁队列,它可以执行并发单个链表。一个小警告:如果您不使用poll或peek,而仅iterator()(+
.remove()),它将泄漏内存。

太好了Queue



 类似资料:
  • 主要内容:示例,死锁解决方案示例死锁描述了两个或多个线程等待彼此而被永久阻塞的情况。 当多个线程需要相同的锁定但以不同的顺序获取时,会发生死锁。 Java多线程程序可能会遇到死锁状况,因为关键字会导致执行线程在等待与指定对象相关联的锁定或监视时出现阻止情况。 看看下面一个例子。 示例 当您编译并执行上述程序时,会出现死锁情况,以下是程序生成的输出 - 上述程序将永久挂起,因为两个线程都不能继续进行,等待彼此释放锁定,所以您可以按

  • 问题内容: 我正在阅读《 实践Java并发 》一书。在第15章中,他们讨论了非阻塞算法和 比较交换 (CAS)方法。 据记载,CAS的性能比锁定方法好得多。 我想问一下已经使用这两个概念的人,并想听听您何时更喜欢这些概念中的哪一个? 真的那么快吗? 对我来说,锁的用法更加清晰,易于理解,甚至维护起来也更好 (如果我错了,请纠正我) 。我们是否应该真正专注于创建与CAS相关的并发代码,而不是锁定,以

  • 我有一个我制作的Some_class类型的链表,在类中,我创建了一个方法来插入和显示一些数据。在主类中,我创建了一个类型为Some_class的链接列表,我也创建了一个对象。我用我的插入方法调用了对象,它很好。然后我在链接列表中添加了对象,如下所示: 我想访问linkedlist中的此对象,并显示其数据。我可以使用我在类中创建的show\u data方法,但我有一个例子,我想显示linkedlis

  • 问题内容: 如果我在java中的链表上使用了for-each循环,是否可以保证以它们在列表中出现的顺序迭代元素? 问题答案: 保证链表按顺序运行。 从文档中 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 iterator() 以适当的顺序返回此列表中元素的迭代器。

  • 我必须实现类"DoubleChainedList"和"Elem"。DoubleChainedList管理一个双链列表,Elem是关联的节点类,指针指向后继节点和前驱节点。 我必须实施以下方法: public void removeAtIndex(int i)//删除位置i处的元素 public int[]toArray()//将列表作为数组返回 双链列表 要素: 我的问题:它显示了以下错误:hea

  • 我试图解决的问题的措辞如下: 您将获得两个链表:大小分别为n和m的list1和list2。从ath节点到bth节点删除list1的节点,并将list2放置到位。 我将我的解决方案写成: 我很难理解为什么它不起作用。我似乎找不到我的错误