- Считалка Программа должна запустить n потоков, каждый из которых в цикле печатает на экран свой номер в виде "Thread-". Нужно сделать так, чтобы все номера печатались строго по порядку.
Например:
$ Counter 5
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
...
-
Перекличка Программа запускает n дополнительных потоков. После того, как главный поток печатает "Are you ready?" n потоков должны вывести (возможно, вразнобой) "Yes" c с вероятностью 90% или "No" с вероятностью 10%. Если все потоки вывели "Yes" программа завершается, если хотя бы один "No" - вопрос повторяется.
-
Блокирующая очередь Конструктор принимает один параметр - максимальное количество элементов в очереди. Очередь с методами:
-
void offer(List e) - добавляет элементы в конец очереди атомарно. Если очередь заполнена (e.size() + queue.size() > maxQueueSize), то метод блокируется.
-
List take(int n) - возвращает n элементов первых из очереди и удаляет их атомарно. Если в очереди меньше n элементов - метод блокируется. Задания со звёздочкой:
-
void offer(List e, long timeout) - добавляет элементы в конец очереди атомарно. Если очередь заполнена (e.size() + queue.size() > maxQueueSize), то метод блокируется до освобождения очереди или истечения таймаута.
-
List take(int n, long timeout) - возвращает n элементов первых из очереди и удаляет их атомарно. Если в очереди меньше n элементов - метод блокируется до появления элементов в очереди или истечения таймаута. К этому заданию требуется написать модульные тесты.
- Смотрите классы ReentrantLock, Condition, CountDownLatch, CyclicBarrier. Возможно, они смогут облегчить жизнь.