Отслеживание файлов, загружаемых разными потоками - PullRequest
1 голос
/ 08 мая 2011

В Java я пытаюсь написать FileManager, который содержит каталог файлов и загружает их в другие FileManager по запросу. Каждый раз, когда поступает запрос на загрузку (через сокет), создается новый поток для обработки загрузки запрошенного файла.

Я думал об использовании ExecutorService и FileUploader implements Runnable для решения этой проблемы.

т.е. если сессия - это ExecutorService, а mySocket - это сокет, к которому FileManager прослушивает запросы, то создание каждого потока будет выглядеть примерно так:

sessions.execute(new FileUploader(mySocket.accept()));

Проблема в том, что если FileManager получает команду переименовать файл в своей базе данных, ему нужно дождаться завершения всех потоков, которые в данный момент загружают файл, прежде чем переименовывать файл.

Итак, вопрос в том, как я могу отслеживать, сколько / какие потоки загружают данный файл?

1 Ответ

1 голос
/ 09 мая 2011

Вы можете использовать CountDownLatch , связанное с каждым именем файла, которое вы хотите передать. Ваш средний поток должен попытаться подождать () в защелке и начать обработку только тогда, когда он получит защелку, а ваши дети должны использовать countDown (), когда они закончат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...