Skip to content

Latest commit

 

History

History
41 lines (33 loc) · 2.7 KB

File metadata and controls

41 lines (33 loc) · 2.7 KB

Threads

  1. Считалка Программа должна запустить n потоков, каждый из которых в цикле печатает на экран свой номер в виде "Thread-". Нужно сделать так, чтобы все номера печатались строго по порядку.

Например:

$ Counter 5
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
...

  1. Перекличка Программа запускает n дополнительных потоков. После того, как главный поток печатает "Are you ready?" n потоков должны вывести (возможно, вразнобой) "Yes" c с вероятностью 90% или "No" с вероятностью 10%. Если все потоки вывели "Yes" программа завершается, если хотя бы один "No" - вопрос повторяется.

  2. Блокирующая очередь Конструктор принимает один параметр - максимальное количество элементов в очереди. Очередь с методами:

  3. void offer(List e) - добавляет элементы в конец очереди атомарно. Если очередь заполнена (e.size() + queue.size() > maxQueueSize), то метод блокируется.

  4. List take(int n) - возвращает n элементов первых из очереди и удаляет их атомарно. Если в очереди меньше n элементов - метод блокируется. Задания со звёздочкой:

  5. void offer(List e, long timeout) - добавляет элементы в конец очереди атомарно. Если очередь заполнена (e.size() + queue.size() > maxQueueSize), то метод блокируется до освобождения очереди или истечения таймаута.

  6. List take(int n, long timeout) - возвращает n элементов первых из очереди и удаляет их атомарно. Если в очереди меньше n элементов - метод блокируется до появления элементов в очереди или истечения таймаута. К этому заданию требуется написать модульные тесты.

Рекомендации:

  1. Смотрите классы ReentrantLock, Condition, CountDownLatch, CyclicBarrier. Возможно, они смогут облегчить жизнь.