Java singleton patten:
public class Singleton {
static Singleton instance;
static Singleton getInstance(){
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
Если есть два потока: A и B, они вызывают getInstance (), возможно, один из потоков получит экземпляр не полностью сконструированного.Но если вы выполняете эти фрагменты кода много-много раз, вы можете не получить неправильный результат.Я думаю, это потому, что выполнение байт-кода или ассемблера очень быстро.Если вы управляете выполняемыми шагами, поочередно отлаживаете байт-код или ассемблерный код, может быть воспроизведен неправильный результат.
Проблема одноэлементного (или непостоянного) Java-патента часто обсуждается в Интернете.Но трудно найти какой-нибудь полезный, аутентичный практический код, который будет выполняться произвольное время для получения неправильного результата.
Есть ли какие-нибудь полезные блоги / статьи, рассказывающие о том, как доказать неправильный результат выполнения, и некоторые доказательства в байт-коде или коде сборки?Я хочу взглянуть на хаотичный / беспорядочный результат.