Предположим, что у нашего кода есть 2 потока (A и B), где-то есть ссылка на тот же экземпляр этого класса:
public class MyValueHolder {
private int value = 1;
// ... getter and setter
}
Когда Thread A делает myValueHolder.setValue(7)
, нет гарантии, что Thread B когда-либо прочитает это значение: myValueHolder.getValue()
может - в теории - продолжать возвращать 1
навсегда.
Однако на практике аппаратное обеспечение рано или поздно очистит кеш второго уровня, поэтому Thread B будет читать 7
раньше или позже (обычно раньше).
Есть ли способ заставить JVM эмулировать этот наихудший сценарий, для которого он продолжает возвращать 1
forever для Thread B?. Было бы очень полезно протестировать наш многопоточный код с помощью нашего существующие испытания при этих обстоятельствах.