0
我有不同的線程,我想從中調用一個函數,該元素通過查找當前最高ID,遞增它並插入新對象(與遞增的ID)放入列表中。Java:線程:添加具有ID的元素以從不同線程列出
我一定要關心的是,當兩個線程調用函數在同一時間,兩個對象將具有相同的ID或不如果你使用像++或操作JVM利用這個
我有不同的線程,我想從中調用一個函數,該元素通過查找當前最高ID,遞增它並插入新對象(與遞增的ID)放入列表中。Java:線程:添加具有ID的元素以從不同線程列出
我一定要關心的是,當兩個線程調用函數在同一時間,兩個對象將具有相同的ID或不如果你使用像++或操作JVM利用這個
護理+ = 1,那些需要多個步驟才能工作,並且如果這些步驟與該字段上的另一個線程調用的操作交錯,則這些線程可能會干擾其他線程,並且該字段可能會獲得一些意想不到的值。
此外,查找最高ID並在列表中插入新值的過程不是您想要被其他線程干擾的過程。在找到高價值之前,您需要先獲取一個鎖定,然後等到完成插入新條目後再進行鎖定。
如果你使用原子類,他們的方法不會受到干擾(這就是原子的意思)。使用AtomicLong.incrementAndGet()將導致每次調用返回下一個長整型值。
使用原子變量或數據庫序列比混亂搜索最高的id(並且必須鎖定)要好。在使用方法來生成您所描述的id的應用程序中,id生成可能是一個瓶頸。
請向我們展示如何訪問列表並確定最高ID。根據目前的信息,我會說是的,你必須照顧。 –
你肯定會'關心'。這可以很容易地以產生具有相同值的多個id的方式來實現。 – matt