gpt4 book ai didi

Java:线程:添加具有 ID 的元素以从不同线程列出

转载 作者:行者123 更新时间:2023-12-02 13:02:01 25 4
gpt4 key购买 nike

我有不同的线程,我想从中调用一个函数,该函数通过查找当前最高 ID、递增它并将新对象(具有递增的 ID)插入到列表中来将元素添加到列表中。

我是否需要关心,当两个线程同时调用该函数时,两个对象将具有相同的 ID,或者 JVM 是否会处理这个问题

最佳答案

如果您使用像++ 或 += 1 这样的操作,那么这些操作需要多个步骤才能工作,并且如果这些步骤与该字段上的另一个线程调用的操作交错,那么这些线程可能会干扰其他线程,并且该字段可能会受到干扰。一些意想不到的值(value)。

此外,您不希望其他线程干扰查找最高 id 并在列表中插入新值的过程。您需要在找到高值之前获取锁并保留它,直到完成插入新条目。

如果您使用 Atomic 类,则它们的方法不会受到干扰(这就是 Atomic 的含义)。使用 AtomicLong.incrementAndGet() 将导致每次调用返回下一个 long 值。

最好使用原子变量或数据库序列,而不是反复搜索最高 ID(并且必须锁定)。在使用像您所描述的方法生成 id 的应用程序中,id 生成可能是一个瓶颈。

关于Java:线程:添加具有 ID 的元素以从不同线程列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44262185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com