My testing task for basic Multithreading skills in Java. Found such an interesting problem on habrahabr and solved it. Description in Russian:
Есть транспортные корабли, которые подплывают к туннели и далее плывут к причалам для погрузки разного рода товара. Они проходят через узкий туннель где одновременно могут находиться только 5 кораблей. Под словом “подплывают к туннели” имеется ввиду то, что корабли должны откуда-то появляться. Их может быть ограниченное количество, а может быть бесконечное множество. Слово “Подплывают” назовем генератором кораблей. Тип груза на кораблях и их вместительность могут быть разными. Далее есть 3 вида причалов для погрузки кораблей — Хлеб, Банан и Одежда. Каждый причал берет или подзывает к себе необходимый ему корабль и начинает его загружать. За одну секунду причал загружает на корабль 10 ед. товара. То есть если у корабля вместительность 50 шт., то причал загрузит его за 5 секунд своей работы. Требования: Правильно разбить задачу на параллельность; Синхронизировать потоки, сохранить целостность данных; Работа генератора кораблей не должна зависеть от работы причалов и наоборот; Общий ресурс должен быть Thread Safe; Потоки не должны быть активными если нет задач; Потоки не должны держать mutex если нет задач;