На этом слайде мы создадим простейшую программу с двумя потоками.
Дата отправки отчёта:
15 февраля 2019 г.
Задание выполнено: за
2 час. 29 мин.
Чему научился:
для создания потока а) наследуем от Thread (extends Thread) или б) имплементируем Runnable (implements Runnable)
Метод run запускает отдельный поток
sleep(), wait() снижают нагрузку на процессор, создавая паузы выполнения инструкций в коде
Для создания нового отдельного потока создаётся новый экземпляр класса Thread с передачей ему аргументом экземпляра first из класса Workerа имплементированного от Runnable
Чтобы ограничить доступ к методам, и позволить только одному потоку менять данные там в какой-либо момент времени, мы используем ключевое слово synchronized.
Synchronized позволяет заблокировать доступ к методу или части кода, если его уже использует другой поток.
Монитор Ключевое слово synchronized позволяет "войти в монитор объекта". Монитор - это специальный объект, который следит за "состоянием" метода или объекта. Он смотрит, "занят" он или "свободен" в данный момент.
Атомарный Многие проблемы с потоками возникают тогда, когда два потока, используя один метод, мешают друг другу. Они могут менять значения переменных, которые использует другой поток. Атомарный - значит "неделимый" - в том смысле, что операция может быть завершена одним потоком, и другой не может в ней ничего "напортить".
Минус synchronized: Недостатком использования synchronized является как раз то, что другие потоки вынуждены ждать, пока нужный объект или метод освободится. Это создает так называемый "bottle neck" ("узкое место") в программе - и скорость работы может пострадать.
Научился: для создания потока
а) наследуем от Thread (extends Thread)
или
б) имплементируем Runnable (implements Runnable)
Метод run запускает отдельный поток
sleep(), wait() снижают нагрузку на процессор, создавая паузы выполнения инструкций в коде
Для создания нового отдельного потока создаётся новый экземпляр класса Thread с передачей ему аргументом экземпляра first из класса Workerа имплементированного от Runnable
Чтобы ограничить доступ к методам, и позволить только одному потоку менять данные там в какой-либо момент времени, мы используем ключевое слово synchronized.
Synchronized позволяет заблокировать доступ к методу или части кода, если его уже использует другой поток.
Научился: Для класса Worker я создал конструктор с 2 мя параметрами именем потока и временем ожидания
Трудности: 1. Создать новый проект с именем ThreadExample
2. Создать класс с имлементацией интерфейса Runnable и реализовать в нем метод Run();
3. Реализовать основной класс Main, в котором создать экземпляры классов
Worker и Thread.
4. Вызвать метод start() класса Thread.
5. Организовать отдельный поток в виде вечного цикла в основном классе.
6. Запустить программу и убедиться в работоспособности двух потоков.
7. Добавить третий поток и протестировать программу.