Нарушение двойной проверки блокировки Singleton - PullRequest
0 голосов
/ 27 февраля 2020
if (searchBox == null) {            //line 1
synchronized (SearchBox.class) {    //line 2
    if (searchBox == null) {        //line 3
        //do some stuff             //line 4
        // do some more stuff       //line 5
        searchBox = new SearchBox();//line 6
    }
}

}

, если поток t1 запускается и выполняется до строки 4, а в строке 5 перед созданием объекта (строка 6) он перешел в состояние ожидания и снял блокировку. Затем поток t2 начинает выполнение, завершает выполнение и создает INSTANCE. Теперь поток t1 снова получил возможность выполнить и начал со строки 6, что привело к созданию нового объекта. не является ли это нарушением синглтона даже в методе двойной блокировки.

...