Почему VolatileCachedFactorizer является потокобезопасным, как упомянуто в параллелизме на практике? - PullRequest
0 голосов
/ 09 февраля 2019

Я не могу понять, почему следующие программы, упомянутые в параллельности на практике, являются поточно-ориентированными.Они взяты из глав 3.12 и 3.13

class OneValueCache {
private final BigInteger lastNumber;
private final BigInteger[] lastFactors;

public OneValueCache(BigInteger i, BigInteger[] factors) {
    lastNumber = i;
    lastFactors = Arrays.copyOf(factors, factors.length);
}

public BigInteger[] getFactors(BigInteger i) {
    if (lastNumber == null || !lastNumber.equals(i)) {
        return null;
    } else {
        return Arrays.copyOf(lastFactors, lastFactors.length);
    }
}   
}
public class VolatileCachedFactorizer implements Servlet {
private volatile OneValueCache cache = new OneValueCache(null, null);

public void service(ServletRequest req, ServletResponse resp) {
    BigInteger i = extractFromRequest(req);
    BigInteger[] factors = cache.getFactors(i);

    if (factors == null) {
        factors = factor(i);
        cache = new OneValueCache(i, factors);
    }
    encodeIntoResponse(resp, factors);
}
}

Что произойдет, если несколько потоков попытаются выполнить метод обслуживания?Как мы можем рассматривать программу как поточно-ориентированную?Я хотел бы знать некоторые объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...