
- Comparator, сортировка коллекций
- Разделяемые ресурсы, Конфликты, проблема совместного доступа
- Применение
volatile
- Мютекс и монитор
- Применение
synchronized
- Concurency, BlockingQueues (java7)

Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь! Вернуться к обучению java онлайн на JavaRush
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Для работы с общими данными в thread-ах расмотрим «сферический» потокобезопасный int с двумя операциями на нем ++ и --:
У такого метода есть важный недостаток — скорость работы. Так как много времени уйдет на дополнительные сервисные действия при входе в синхронизированные методы (или внутрь synchronized блока, что в ряде случаев хуже):
1. попытка блокирования монитора
2. блокировка потока
3. разблокировка монитора
4. разблокировка потока
В процессорах начиная с конца прошлого века (в связи с широким распространением многопроцессорности и позже многоядерности) появилась реализация инструкций из серии Compare And Save (CAS). Смысл:
Шаг 1. Читаем значение равное А по адресу V
Шаг 2. Вычисления, в процессе которых получили из A новое значение B
Шаг 3. CAS заменит по адресу V на новое значение B, если только непосредственно в момент замены там было А. (вот это самый ключевой момент!)
И выставит флаг состояния, если такую замену совершил.
То есть ненадо ничего блокировать, процессор сделает за вас и просто не даст записать новое значение, если старое было модернизировано не вашей задачей.
Процесс в курсе, что используемая в вычислениях стартовое значение переменной «протухло» и сам решит перестартовать новое вычисление или прервать вычисление.
Атомарные переменные можно рассматривать как продвинутые volatile примитивы у которых появился CAS.
Выгода 1) Отсутствие необходимости блокировок (synchronized) в следствие наличия реализации
В конструкторе параметр age а в компораторе height. Или так и задумано?
Пример кода, пользователи сортируются по росту:
на самом деле
return o1.weight — o2.weight;
исправьте пожалуйста!