Это один из немногих случаев, когда уместно явно использовать подкласс Thread, а не использовать Runnable в пуле: для проверки правильности завершения с объединением.
Другими словами, этот подход позволяет вам прервать тестовый поток и присоединиться к нему, чтобы убедиться, что он был завершен правильно.Вы не можете обрабатывать потоки таким образом, если используете, например, - ThreadPoolExecutor
class.
Кроме того, можно создать новый поток, инициируя его с помощью Runnable, например Thread taker = new Thread(() -> {...});
.Помните, что книга была написана около 8 лет назад, и создание Runnable
вместо подкласса Thread
сделало бы этот пример немного длиннее.