Java:线程:将带有 ID 的元素添加到不同线程的列表中

FMF

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

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

内森·休斯

如果您使用 ++ 或 += 1 之类的操作,则这些操作需要多个步骤才能工作,并且如果这些步骤与该字段上的另一个线程调用的操作交织在一起,则这些线程可能会干扰 esch other 并且该字段可能会获得一些意外的值.

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当任务添加到不同线程中的空循环时,行为异常

我如何从Vala中的不同线程添加到GLib.List

如何将带有ID标签的图例添加到我的代码中

将来自不同线程的值添加到全局集中,并等待所有线程完成

将带有引用的迭代器移动到线程中

是否可以将ID添加到已经具有ID的元素中

填充在不同线程中的列表在调用者线程中显示为空-Java

将带有元素的对象添加到数组

Java访问不同线程中的对象

java:线程ID重用ID

使用3个线程将元素添加到5个ArrayList中:arraylist大小的总和始终不同

将带有标题的节添加到具有可扩展行的SwiftUI列表中

如果ID相同,如何添加到对象的现有列表中

在Linux中获取Java线程的线程ID

如何在Javascript中将带有文本的字幕元素添加到div中

tkinter - 将带有字典的嵌套列表中的数据添加到树视图

无法在Tkinter中将带有网格的按钮添加到列表中

将带有列表的字符串添加到多行文本框中

Python将带有值的列添加到元组列表中

单击Java脚本后如何将带有<i>元素的<li>元素添加到<ul>

Javascript将一个元素添加到另一个没有id的元素中

在Laravel 5中将带有表名和ID的表联接

如何将带有txt和id的.txt文件内容解析为python中的字典?

将带有文本的ID保存在表格视图单元格中

如何将带有所有元素的字符串的完整列表添加到C#Form Application中的类

无法将带有工具提示的新项目添加到JComboBox(Java Swing)

Java 将带有计算的列添加到 CSV 文件

Java将带有两个参数的对象添加到ArrayList

从JavaFX中的不同线程更新UI