Как безопасно сбросить ценность AtomicInteger в очень многопоточной среде? [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Как безопасно сбросить ценность AtomicInteger в очень многопоточной среде? [закрыто]

Сообщение Anonymous »

Реализация класса ниже завершает два поля Atomicinteger . После достижения значения MAX = 9999 основной номер последовательности, как ожидается, сбросится до нуля. Всякий раз, когда это происходит, ResetCount должен быть увеличен одним. Цель состоит в том, чтобы обеспечить уникальные секвенированные идентификаторы, возвращенные вызывающим абонентам в очень параллельном сервисе. < /P>

Код: Выделить всё

public class SequenceGenerator {

private static final SequenceGenerator GENERATOR = new SequenceGenerator();
private final AtomicInteger sequence = new AtomicInteger(0);
private final AtomicInteger resetCount = new AtomicInteger(0);

private SequenceGenerator() {}

public static SequenceGenerator getInstance() {

return GENERATOR;
}

/**
* This method a unique sequenceId that follow this format
* [ResetCount-SequenceNumber]. The SequenceNumber range is [0000,9999]
* and every time the max value 9999 exceeds, it will reset back to zero
* and the ResetCount value will increase by one.
*
* @return a unique sequenceId in literal format
*/
public String generateSequenceId() {

while (true) {

int local = sequence.getAndIncrement();

if (local 
Я обновил метод выше, и, надеюсь, это согласно спецификациям и защитным потокам < /p>
private final AtomicInteger sequence = new AtomicInteger(0);
private final AtomicInteger resetCount = new AtomicInteger(0);
private final Object resetLock = new Object();

public String generateSequenceId() {

while (true) {

int local = sequence.getAndIncrement();

if (local =10000){

sequence.set(0);
resetCount.incrementAndGet();
}
}
}
}
}
< /code>
Последнее обновление кода - это обновление операции сброса последовательности внутри синхронизированного блока. Надеемся, что только одна нить запускает сброс последовательности и увеличивает количество сброса.  

Подробнее здесь: [url]https://stackoverflow.com/questions/79475109/how-to-safely-reset-atomicinteger-value-in-highly-multithreaded-environment[/url]

Вернуться в «JAVA»