У меня небольшой вопрос по Java AtomicInteger
.Я знаю, что могу реализовать поточно-ориентированные счетчики.Но я не смог найти ничего о сложных вычислениях с AtomicInteger
.
Например, у меня есть такое вычисление (i и j являются объектными переменными, "this"):
public void test(int x) {
i = i + ( j * 3 ) + x
}
Можно ли сделать этот метод поточно-ориентированным только с AtomicInteger
?
Это допустимо?
public void test(int x) {
do {
int tempi = i.get();
int tempj = j.get();
int calc = tempi + ( tempj * 3 ) + x;
} while (i.compareAndSet(tempi, calc));
}
Я думаю, что нет, потому что поток может изменить j во время вычисления.Чтобы избежать этого, я должен контролировать, если j изменяется во время расчета.Но я не нахожу функцию «просто сравнить» в AtomicInteger
.
Псевдокод:
public void test(int x) {
do {
int tempi = i.get();
int tempj = j.get();
int calc = tempi + ( tempj * 3 ) + x;
} while (i.compareAndSet(tempi, calc) && j.compare(tempj) /* changed */);
}
Кто-нибудь может мне помочь с разъяснениями?