Java: как хранить несколько потоков, которые обрабатывают разные файлы - PullRequest
0 голосов
/ 19 мая 2011

У меня есть сервер, который отправляет различные файлы (каждый открывает поток) по запросу.каждый поток не знает, какой файл он обрабатывает при создании, но только после получения сообщения с его именем, поэтому мне нужно как-то связать его с файлом.

Мне нужна опция для ожиданиявсе потоки определенного файла до конца, и, конечно, все потоки на сервере.

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

Любое предложение, как реализовать это?

1 Ответ

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

Мне нужна возможность дождаться окончания всех потоков определенного файла

Я не совсем понял ваше требование, но думаю, что-то подобное будет работать для вас:

// FileSender is the wrapper class you mentioned - where you keep track
// of file->threads association
public class FileSender {
    private final File file;

    private List<Thread> threads = new ArrayList<Thread>();

    public FileSender(File file) {
        this.file = file;
    }

    public void addThread(Thread thread) {
        if (thread != null) {
            this.threads.add(thread);
        }
        for (Iterator<Thread> itr = threads.listIterator(); itr.hasNext();) {
            Thread t = itr.next();
            if (! t.isAlive()) {
                itr.remove();
            }
        }
    }

    // this method blocks until all threads associated with
    // this file has completed execution
    public void waitForCompletion() throws InterruptedException {

        for (Iterator<Thread> itr = threads.listIterator(); itr.hasNext();) {
            Thread thread = itr.next();
            thread.join();
            itr.remove();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...