Практика многопоточности в Java
Задачи опираются на приёмы раздела: Runnable и
start, join, sleep,
getState, interrupt, setDaemon.
Запустите два потока: первый выводит "A",
второй "B". Вызовите join для обоих
и напечатайте "end". Убедитесь, что
"end" появляется только после "A" и
"B".
Создайте массив из 5 потоков. Каждый спит
50 мс и пишет свой индекс. После всех
join выведите сумму индексов 0..4
(ожидается 10).
Запустите worker с sleep(200). Через
30 мс выведите его getState(),
затем дождитесь join и выведите
TERMINATED через сравнение с
Thread.State.TERMINATED.
Worker в цикле увеличивает счётчик до 1_000_000,
если не прерван. Прервите его из main через
5 мс, дождитесь join и выведите
финальное значение счётчика (оно должно быть меньше
миллиона).
Запустите daemon, который раз в 100 мс печатает
"ping". Главный поток спит 350 мс,
печатает "done" и завершается. Проверьте,
что программа выходит без ручного interrupt
daemon.