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

当我仅通过offer和poll访问LinkedList时,它是线程安全的吗?

阎知
2023-03-14
问题内容

我有一个链表samples

protected LinkedList<RawDataset> samples = new LinkedList<RawDataset>();

我将元素添加到线程1中的列表中,如下所示:

this.samples.offer(data);

我正在第二个线程中从中检索元素,如下所示:

public RawDataset retrieveSample() {
    return this.samples.poll();
}

是否将其视为线程安全的?即使线程1和2都在修改列表,它们也只能在列表的开头或结尾进行修改,对吗?

如果不是,那么谁能指出我poll/ 附带的Java API中的类,offer并且肯定是线程安全的?

先感谢您。

顺便说一句:Collections.synchronizedList(new LinkedList())我不会访问offer/ poll


问题答案:

LinkedList不是线程安全的。您必须自己锁定。

如果适合您,请尝试ConcurrentLinkedQueue或LinkedBlockingDeque,它们是线程安全的,但行为与LinkedList略有不同。



 类似资料:
  • 这会产生冲突吗?例如,当2个线程试图同时执行它们的任务时?

  • 我目前有一个项目,它使用jackson faster xml使用自定义序列化器和反序列化器将POJO序列化/反序列化到Json。据我所知,ObjectMapper一旦被创建和配置就是线程安全的。但是,我注意到在使用JMeter运行测试时,偶尔会发生以下情况- 线程1进入CustomerSerializer并开始序列化 线程2进入CustomSerializer,插入线程1,并从头到尾开始序列化 线

  • 我有一个应用程序,它有一个ConcurrentHashMap本地存储一个存储在外部服务器上的数据副本。地图每隔几秒钟就会更新一次数据的新副本。 我有一个循环,每隔几秒钟运行一次,它可以访问HashMap并按照值的顺序将元素添加到数组中(实际上它做的事情还多一些,但这并不相关)。我的问题是,如果数据在创建数组的过程中发生了变化,您可能会在不同的地方有重复的键,或者完全省略一些键。 示例: 如您所见,

  • 考虑一个无状态EJB 从EJB3.1规范中 容器将支持并发执行的会话 bean的许多实例;但是,每个实例只看到一个 序列化的方法调用序列。因此,有状态或 无状态会话bean不必被编码为可重入的 因此无状态seession bean一次最多只能“服务”一个请求,这通常是由管理bean池的容器实现的。这一切的伟大目标是线程安全。 我的问题是为什么我们需要这种形式的线程安全?我的意思是Spring be

  • 我被要求支持2个URL,以便JMX访问我们的服务器: 一个安全的(服务:jmx:rmi://localhost/jndi/rmi://localhost:2020/jmxrmi)不安全:(服务:jmx:rmi://localhost/jndi/rmi://localhost:2020/insecure-jmxrmi) 不安全的主要用于演示目的-不,它不会在生产过程中使用。 我可以为 /jmxrmi

  • 问题内容: 随着的发布,我一直在尝试一些新的API,其中之一是。 我注意到警告之一是针对。 这是警告: 并给出了在UI线程上进行的调用。 是否应该真正从UI线程进行访问和更改? 问题答案: 很高兴您已经在玩它! 注意事项:( 以懒惰的子弹形式) 如果这是您遇到的最严重的问题,则您的应用程序可能是个不错的选择。:)写操作通常比读操作慢,因此请确保使用的是SharedPreferenced $ Edi