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, 17:56
Не сразу смог въехать в чем и за счет чего преимущество атомарных типов по сравнению с 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) в следствие наличия реализации
IgorBrest
Уровень 33
10 июня 2016, 09:20
познавательно
Tigran
Уровень 30
26 июля 2016, 11:01
Нифига себе, минилекция в комментарии! Спасибо!
Byshevsky
Уровень 16
2 апреля 2016, 14:53

В конструкторе параметр age а в компораторе height. Или так и задумано?
Shtramak
Уровень 40
18 апреля 2016, 18:43
По ходу даже компилятор не осмелился сортировать женщин по возрасту… ))) Видимо выдавал нечто на подобии «It's a crime to sort Woman by age», вот и пошли на хитрость :)
deft
Уровень 31
7 июня 2016, 11:45
Посмотрите на все поля класса Womаn. Мы пишем компаратор для сравнения по росту. И в строке Collection.sort(...) мы сортируем Womаn по росту. Можем написать компаратор для любого поля или нескольких полей.
Byshevsky
Уровень 16
7 июня 2016, 16:26
В квадратике «пример использования» кусок программы в которой перед инициализацией компаратора добавляются три объекта вумен, при создании которых заполняется поле age. Как прикажете компаратору сортировать объекты по полю height если оно у всех имеющихся объектов null?
Alejandro_Kolio
Уровень 30
25 июля 2016, 23:06
SortWomanByAgeException
ferasinka
Уровень 32
4 августа 2016, 22:07
Не null, a 0 ;-)
Byshevsky
Уровень 16
4 августа 2016, 22:35
по нулю тоже сильно не отсортируешь. Вот скажи, я же прав что там ошибка?
ferasinka
Уровень 32
5 августа 2016, 00:35
По факту — да, нужно исправить.
Medniy
Уровень 33
9 марта 2016, 13:45
Roman_kh
Уровень 33
5 января 2016, 19:40
post about «happens-before»: link
odabc
Уровень 41
23 сентября 2015, 16:45
В главе 1 в примере написано
Пример кода, пользователи сортируются по росту:
на самом деле
return o1.weight — o2.weight;
исправьте пожалуйста!
mrzzzio
Уровень 30
11 марта 2015, 11:34
Действительно, а что еще можно посмотреть на досуге?
AlexY
Уровень 40
7 ноября 2014, 23:15
Неужели материал лекции был исчерпывающим? :)