У нас есть эти объекты:Java Параллелизм на практике: Листинг 3.12 и 3.13
// Листинг 3,12
@Immutable
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);
}
}
}
// Листинг 3.13
@ThreadSafe
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);
}
}
В книге говорится, что VolatileCachedFactorizer - это сохранение потока. Зачем?
Например:
- Поток А считывает cache.getFactors (я);
- Затем поток B считывает cache.getFactors (i);
- Затем поток B пишет кеш.
- Затем поток A пишет кеш.
Можно ли считать этот поток нитью? Что я не понимаю?