我有一個方法可變參數線程安全的靜態方法?
public static Person updatePersonId (Person person)
{
// If the ID of the person reaches the maximum ID in our predefined range in configuration then reset the ID from the start otherwise it will cross the range we defined.
if (person.getNewID().longValue() == person.getLastPossibleID().longValue())
{
person.setNewID (person.getFirstID());
}
// add 1 to Old ID to get new ID
person.setNewID (person.getNewID + 1);
return person;
}
我使用Hibernate來將其更新到數據庫中。正如你所看到的,我不能在同一個ID
的數據庫中擁有一個以上的人(因爲我們總是將其以前的ID加1)。
現在的問題是,當我同時運行我的應用程序,即同時發生兩個事務時,分配給人的ID有時例如重複。
Database row
PersonID PersonName
1 Bob
2 Robert
2 Daniel
是我創建的方法,而不是線程安全的?我應該添加Synchronized關鍵字嗎?
我的方法不是線程安全的嗎?我應該添加Synchronized關鍵字嗎? NO使用DB序列 –
@ScaryWombat,OP需要一個循環序列。 – shmosel
但是人們,我們可以做到這一點沒有序列?我的方法不是線程安全的嗎?併發問題明顯造成重複ID? – Aiden