Как увеличить потокобезопасность?
Вы можете использовать AtomicInteger
.
Как я могу получить доступ к тем, кто находится за пределами этого класса? Через статическую переменную? Или я могу поместить это в контекст приложения?
Вы можете использовать простой метод получения. Или я что-то упустил?
Обновление
В зависимости от вашего обновления, вот как я могу изменить ваш пример кода:
public class OnesRun implements Runnable {
private static final AtomicInteger ones = new AtomicInteger();
private final int passendNumber;
public OnesRun(int passendNumber) {
this.passendNumber = passendNumber;
}
public void run() {
if (passendNumber == 1)
OnesRun.ones.incrementAndGet();
}
public static void setOnes(int newValue) {
ones.set(newValue);
}
public static int getOnes() {
return ones.get()
}
}
...
OnesRun.setOnes(getCurrentValueOnes());
while ( (number = readNumbersFromFile) != null) {
threadPool.execute(new OnesRun(number));
}
print("Overall values of ones " + OnesRun.getOnes());
Помимо того, что уже обсуждалось (создание ones
a private static AtomicInteger
и добавление пары геттер / установщик), я сделал оба члена final
, что всегда желательно, если это возможно, особенно в параллельном коде.
Обратите также внимание, что AtomicInteger
хранится как деталь реализации - он не предоставляется открытым интерфейсом класса.