Многопоточность. Задания

1. Создать класс расширяющий Thread

  1. Создать класс NewThread расширяющий Thread.
  2. Переопределить метод run(). В цикле for вывести на консоль символ 100 раз.
  3. Создать экземпляр класса и запустить новый поток. 

2. Создать класс реализующий Runnable

  1. Создать класс, реализующий интерфейс Runnable.
  2. Переопределить run() метод. Создать цикл for. В цикле распечатываем значения от 0 до 100 делящиеся на 10 без остатка.
  3. Используем статический метод Thread.sleep(), чтобы сделать паузу.
  4. Создать три потока, выполняющих задачу распечатки значений.

3. Вывод символа в трех потоках

Необходимо создать три потока, которые изменяют один и тот же объект. Каждый поток должен вывести на экран одну букву 100 раз, и затем увеличить значение символа на 1. 

  1. Создать класс расширяющий Thread
  2. Переопределить метод run() - здесь будет находиться синхронизированный блок кода. 
  3. Для того чтобы три объекта потока имели доступ к одному объекту, создаем конструктор принимающий на вход StringBuilder объект. 
  4. Синхронизированный блок кода будет получать монитор на объект StringBuilder из пункта 3. 
  5. Внутри синхронизированного блока кода выведите StringBuilder на экран 100 раз, а потом увеличьте значение символа на 1. 
  6. В методе main() создайте один объект класса StringBuilder, используя символ ‘a’.
  7. Затем создайте три экземпляра объекта нашего класса и запустите потоки. 

Решение на Patreon.

4. Изменить класс MyQueue

Изменить класс MyQueue из Межпотоковые коммуникации:

  1. Вместо int n добавить Queue<T> (MyQueue сделать обобщенным), которая будет содержать объекты создаваемые Producer
  2. Добавьте еще один объект Consumer, который будет запускаться тоже отдельным потоком. 
  3. Выводите на консоль какой из объектов Consumer обработал объект из очереди. 
  4. Измените цикл for на бесконечный цикл.

Решение на Patreon.

5. Обедающие философы

  1. Пять безмолвных философов сидят вокруг круглого стола, перед каждым философом стоит тарелка спагетти.
  2. Вилки лежат на столе между каждой парой ближайших философов.
  3. Каждый философ может либо есть, либо размышлять.
  4. Философ может есть только тогда, когда держит две вилки — взятую справа и слева.
  5. Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим.
Read also:
Trustpilot
Trustpilot
Comments