На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Дата отправки отчёта:
14 декабря 2018 г.
Задание выполнено: за
15 час. 53 мин.
Чему научился:
За синхронизировали потоки. Коллизия не совсем то как представлено в уроке. Коллизия — это столкновение норм права, регулирующих одни и те же общественные отношения. При коллизии действует закон, вступивший в силу позже (при прочих равных, то есть при одинаковой юридической силе). В математическом моделировании — столкновение объектов = вот откуда синхрофазотрон (ускоритель частиц - самый мощный на текущий момент циклический это БАК Large Hadron Collider LHC, есть еще линейные - ну это из серии запуска Мюнхаузена на луну из пушки) получаем. В базах данных коллизия — событие, когда один пользователь запускает на выполнение транзакцию по изменению содержимого таблицы, а другой — на выборку из неё данных. Хорошая новость по Java - I IDEA умеет преобразовывать русский набор в правильный контекст - в отличии от VS-которая этого не умеет
Что было сложным:
чем отличается synchronized от volatile - тем: Ключевое слово volatile указывается для поля для того, чтобы указать компилятору, что все операции присвоения этой переменной и все операции чтения из неё должны быть атомарными . volatile - ограничивает одновременный доступ на переменную synchronized - синхронизирует изменение переменной между процессами имеющими к ней доступ все бы было бы одинаково если бы не наше надрашивание count++ которое состоит из следующей операции count=count+1; пока мы взяли count подсчитать - другой поток туда успел значение новое присвоить. И мы уже это новое присвоенное значение складываем - вот вам и косяк. В других ситуациях synchronized и volatile приведут к одинаково правильному результату. Опять же все зависит от контекста применимости в конкретном случае.
Программа работает медленнее из-за того что необходимо время для проведения синхронизации
Долой параллелизм и супекомпьютеры! Да здравствует MSDOS 6.2!
Научился: Синхронизировать потоки Трудности: Описание урока
1. Обновить класс Worker: добавить счётчик count и заменить вечный цикл конечным, где вывести на экран номер итерации и значение счётчика..
2. Обновить основной класс Main: создать экземпляр класса Worker и с его помощью 5 безымянных экземпляров класса Thread.
3. Запустить программу и проанализировать результаты.
4. Дополнить класс Worker, добавив паузу sleep(10).
5. Запустить программу и сравнить новые результаты с предыдущими.
6. Устранить возникшую коллизию добавлением в класс Worker метода synchronized void next().
7. Запустить программу и убедиться в отсутствии коллизии.
8. Поэкспериментировать с различными вариантами функции next().
9. Объяснить в каких случаях и почему происходит замедление работы программы.
10. Сделать скриншот и выслать отчет на проверку.
Научился: Поэкспериментировали с потоками и коллизиями. Synchronized метод подразумевает, что он может выполняться только одним процессом в данный момент.
Св-во переменной volatile означает, что доступ или изменение данной переменной происходит тут же, без ожидания завершения операций над переменной другими потоками.
Время работы программы увеличилось из-за того, что в Synchronized метод next кроме основных операций была добавлена пауза Thread.sleep(10).