Навалило вдохновение попробовать на практике все что смогу вспомнить из того о чем читал - два дня пилил, пилил. В итоге - нужен switch в мейне. Ну да ладно. Вопрос вот в чем - почему если не засинхронить run у потоков - первый поток не успевает булевый флаг поменять и остальные потоки тоже выполняются? Там у меня дальше switch синхронизирован и мне казалось что первый же поток который туда зайдет должен в итоге поменять isWorkDone и на том конец. Ну и если кто имеет какое-то толковое чтиво по Stream API тоже был бы благодарен. В гугле все в общих чертах и, например, тот кастомный Collector который я со Stackа стащил я бы сам не написал, в общих чертах понятно что оно делает, но как - не совсем. Код