В Java я пытаюсь написать FileManager, который содержит каталог файлов и загружает их в другие FileManager по запросу. Каждый раз, когда поступает запрос на загрузку (через сокет), создается новый поток для обработки загрузки запрошенного файла.
Я думал об использовании ExecutorService
и FileUploader implements Runnable
для решения этой проблемы.
т.е. если сессия - это ExecutorService, а mySocket - это сокет, к которому FileManager прослушивает запросы, то создание каждого потока будет выглядеть примерно так:
sessions.execute(new FileUploader(mySocket.accept()));
Проблема в том, что если FileManager получает команду переименовать файл в своей базе данных, ему нужно дождаться завершения всех потоков, которые в данный момент загружают файл, прежде чем переименовывать файл.
Итак, вопрос в том, как я могу отслеживать, сколько / какие потоки загружают данный файл?