Привет, решаю одну задачу связанную с многопоточностью
Я пытаюсь использовать consumer-producer паттерн
Есть FileUploader и FileDownloader и есть MigrationManager, который ими управляет.
С FileDownloader-ом все хорошо - он скачивает файлы, и если они 'ok' скачались, то добавляет их в очередь из имен для FileUploader-a.
И если он обработал (именно попытался скачать и либо смог, либо нет), то говорит манагеру, что закончил.
Манагер говорит это FileUploader-у,
но ему уже может быть все равно, если очередь пустая ==> он уже спит.
А его надо не то чтобы разбудить, а просто выключить, если очередь пустая и все файлы уже скачены
(то, что очередь пустая, значит, что он обработал все файлы и попытался их отправить/смог или не смог, его это уже не колышет).
А если очередь пустая, а все файлы еще НЕ СКАЧЕНЫ, то тогда ему НАДО подождать, вдруг еще что придет.
А если очередь пустая, и все файлы СКАЧЕНЫ, то ему ждать НЕ НАДО.