powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Корректно-ли сделана scala lazy initialization для многопоточного окружения?
7 сообщений из 7, страница 1 из 1
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966682
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос знатокам JMM.

Вот такой scala код после компиляции и декомпиляции в java код при помощи JD-GUI.
Код: scala
1.
2.
3.
4.
5.
6.
7.
8.
package grscalalaziness

import java.lang.System.nanoTime

class Lzy {

  lazy val sample = nanoTime()

}


Превращается в
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
package grscalalaziness;

import scala.reflect.ScalaSignature;
import static java.lang.System.nanoTime;

@ScalaSignature(bytes = "\006\001e1A!\001\002\001\013\t\031AJ_=\013\003\r\tqb\032:tG\006d\027\r\\1{S:,7o]\002\001'\t\001a\001\005\002\b\0255\t\001BC\001\n\003\025\0318-\0317b\023\tY\001B\001\004B]f\024VM\032\005\006\033\001!\tAD\001\007y%t\027\016\036 \025\003=\001\"\001\005\001\016\003\tA\001B\005\001\t\006\004%\taE\001\007g\006l\007\017\\3\026\003Q\001\"aB\013\n\005YA!\001\002'p]\036D\001\002\007\001\t\002\003\006K\001F\001\bg\006l\007\017\\3!\001")
public class Lzy {

    private long sample;
    private volatile boolean bitmap$0;

    public long sample() {
        return bitmap$0 ? sample : sample$lzycompute();
    }
    
    private long sample$lzycompute() {
        synchronized (this) {
            if (!bitmap$0) {
                sample = nanoTime();
                bitmap$0 = true;
            }
            return sample;
        }
    }
}



Не возможна-ли ситуация при которой boolean флаг уже установлен, а текущий поток ещё не увидел что переменная инициализирована?
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966758
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запись в volatile-переменную действует как барьер и гарантирует, что записи во все переменные "до" - записаны.
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966810
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом форуме, как следует из его названия, обсуждается Java, а не Scala. Свободны.
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966836
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему бы и не обсудить, все-таки вопрос на уровне JVM и байткода.
согласен с ответом Basil
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966877
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M,

А где обсуждается Scala?
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38966944
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку в sql.ru нет раздела посвященного Scala то самое уместное место обсуждения - здесь.
Либо в Программинге.. Кроме того в процессе использования Scala - неизбежно
будут вопросы интеграции Scala+Java систем (таковы реаалии).
...
Рейтинг: 0 / 0
Корректно-ли сделана scala lazy initialization для многопоточного окружения?
    #38967025
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вполне очевидно, что это ветка про java как совокупность технологий, а не только как про язык.
Видимо злой комментатор не знал, что scala работает на java технологии. Ну молодец, самоутвердился, теперь иди читай доки а мы будет дальше тут об этом говорить.

Насчет вопроса о корректности. Мне тоже кажется, что сделано корректно, ведь этот код фактически повторяет код синглтона.
Де-факто, это синглтон с двойной проверкой, у которого убрали модификатор static.

Чтение волатила гарантируют, что
- увидится записанное другим потоком в этот волатил. Т.е., bitmap$0 увидится
- увидятся все изменения, которые были сделаны другим потоком до записи в этот волатил. Т.е., sample тоже должен увидится правильно.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Корректно-ли сделана scala lazy initialization для многопоточного окружения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]