JavaRush /Java блог /Архив info.javarush /Уровень 26: план уровня и доп. материалы
hubert
41 уровень

Уровень 26: план уровня и доп. материалы

Статья из группы Архив info.javarush
Уровень 26: план уровня и доп. материалы - 1План уровня:
  • Comparator, сортировка коллекций
  • Разделяемые ресурсы, Конфликты, проблема совместного доступа
  • Применение volatile
  • Мютекс и монитор
  • Применение synchronized
  • Concurency, BlockingQueues (java7)
Курс JavaЧто еще можно посмотреть на досуге: Ответы на вопросы к собеседованию по теме уровня. Часть 1 Ответы на вопросы к собеседованию по теме уровня. Часть 2
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь! Вернуться к обучению java онлайн на JavaRush
Комментарии (17)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Joysi Уровень 41
9 июня 2016
Не сразу смог въехать в чем и за счет чего преимущество атомарных типов по сравнению с synchronized. Вот чутка глубже (Чем дается в лекции) копнул.

Для работы с общими данными в thread-ах расмотрим «сферический» потокобезопасный int с двумя операциями на нем ++ и --:

public class SynchronizedCounter { 
   private int c = 0; 
   public synchronized void increment() { c++; } 
   public synchronized void decrement() { c--; } 
   public synchronized int value() { return c; } 
 }

У такого метода есть важный недостаток — скорость работы. Так как много времени уйдет на дополнительные сервисные действия при входе в синхронизированные методы (или внутрь synchronized блока, что в ряде случаев хуже):
1. попытка блокирования монитора
2. блокировка потока
3. разблокировка монитора
4. разблокировка потока
В процессорах начиная с конца прошлого века (в связи с широким распространением многопроцессорности и позже многоядерности) появилась реализация инструкций из серии Compare And Save (CAS). Смысл:
Шаг 1. Читаем значение равное А по адресу V
Шаг 2. Вычисления, в процессе которых получили из A новое значение B
Шаг 3. CAS заменит по адресу V на новое значение B, если только непосредственно в момент замены там было А. (вот это самый ключевой момент!)
И выставит флаг состояния, если такую замену совершил.

То есть ненадо ничего блокировать, процессор сделает за вас и просто не даст записать новое значение, если старое было модернизировано не вашей задачей.
Процесс в курсе, что используемая в вычислениях стартовое значение переменной «протухло» и сам решит перестартовать новое вычисление или прервать вычисление.
Атомарные переменные можно рассматривать как продвинутые volatile примитивы у которых появился CAS.
Выгода 1) Отсутствие необходимости блокировок (synchronized) в следствие наличия реализации
Byshevsky Уровень 16
2 апреля 2016

В конструкторе параметр age а в компораторе height. Или так и задумано?
Medniy Уровень 33
9 марта 2016
Roman_kh Уровень 33
5 января 2016
post about «happens-before»: link
odabc Уровень 41
23 сентября 2015
В главе 1 в примере написано
Пример кода, пользователи сортируются по росту:
на самом деле
return o1.weight — o2.weight;
исправьте пожалуйста!
mrzzzio Уровень 30
11 марта 2015
Действительно, а что еще можно посмотреть на досуге?
AlexY Уровень 40
7 ноября 2014
Неужели материал лекции был исчерпывающим? :)