§Используйте ленивую инициализацию избирательно. В большинстве случаев, нормальная инициализация предпочтительнее, чем ленивая. Если вы используете ленивую.

Презентация:



Advertisements
Похожие презентации
§66 Синхронизированный доступ к разделяемым mutable данным.
Advertisements

ПРОВЕРЬ СЕБЯ! ПРОВЕРКА.
Многопоточное программирование на Java Java Advanced.
МНОГОПОТОЧНОЕ ПРОГРАММИРОВАНИЕ В JAVA Пакеты java.lang java.util.concurrent.
Многопоточное программирование на Java Java Advanced.
Тема: Управление потоком в PHP Изучить возможности языка PHP при решении задач, требующих использования условного оператора. Рассмотреть примеры управления.
Параллелизм и потоки в Java For students of university Author: Oxana Dudnik.
Предел Бесконечно маленькая величина Бесконечно маленькой величиной называется переменная, которая при всех своих изменениях с некоторого места становится.
Решение уравнений. Математика Преподаватель: Гардт С.М.
Переменные и основные типы переменных на JAVA Выполнил учитель информатики и ИКТ МБОУ СОШ р.п. Евлашево Горелочкин Н.К.
Нововведения в C++11 Докладывает: Сорокина Маргарита.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
«Программирование циклических алгоритмов» Учитель информатики гимназии 12 г. Тюмени Бугаева Елена Викторовна.
1 Java 14. Параллельное выполнение. 2 Терминология При переводе на русский ДВА английских термина имеют одинаковое значение – поток: stream thread Thread.
Циклические вычислительные процессы. Процессы, в которых ряд действий повторяются многократно по одним и тем же математическим зависимостям, называются.
Проверка
Введение в многопоточное программирование Java Advanced
Контроль знаний Экспресс - контроль. Постановка задачи структурного синтеза.
Продолжение следует…
Тип, имя и значение переменной. В объектно-ориентированных языках программирования переменные играют такую же важную роль, как и в процедурных языках.
Транксрипт:

§Используйте ленивую инициализацию избирательно

В большинстве случаев, нормальная инициализация предпочтительнее, чем ленивая. Если вы используете ленивую инициализацию для избавления от многократной инициализации, делайте это в синхронизованном вызове

Если вам нужно применить подход ленивой инициализации и синхронной инициализации к static переменной – это называется владелец ленивой инициализации. Мы получаем бесплатно синхронизированную инициализацию класса при первом обращении, и оптимизированные последующие обращения.

Если необходимо использовать ленивую инициализацию для производительной инициализации поля класса, используйте подход двойной проверки.

Если поле допускает многократную инициализацию, то возможно использовать одинарную проверку Если вы допускаете, что каждый поток проинициализирует это поле, и тип поля не long и не double, то можете убирать модификатор volatile.

§72 Не завязывайтесь на работу планировщика

Любая программа, которая полагается на определенную работу планировщика в своей работе или для обеспечения производительности – почти наверняка не портируема. Количество runnable потоков должно не сильно превосходить количество ядер. (waiting runnable)

Поток не должен быть запущен до тех пор, пока он не может сделать что-то полезное. Потоки не должны в цикле проверять что-то для продолжения своей работы (busy-wait)

Класс будет работать в 2000 раз медленнее чем CountDownLatch при 1000 потоков

Попытка исправить подобные проблемы при помощи Thread.yield() - не удачная альтернатива Thread.yield() не обладает тестируемой семантикой Приоритет потоков облает наименьшей переносимостью из JDK Thread groups are obsolete