Одновременная проблема единственного Java-файла, демонстрируемая отладкой байтового кода или кода сборки - PullRequest
0 голосов
/ 01 марта 2019

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-патента часто обсуждается в Интернете.Но трудно найти какой-нибудь полезный, аутентичный практический код, который будет выполняться произвольное время для получения неправильного результата.

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

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