Java:如何存储处理不同文件的多个线程

时间:2011-05-19 15:02:46

标签: java multithreading concurrency

我有一台服务器,根据请求发送不同的文件(每个文件都打开一个线程)。 每个线程都不知道他在创建时处理哪个文件,但只收到一个带有其名称的消息,所以那时我需要以某种方式将它与文件关联。

我需要等待某个文件的所有线程结束的选项,当然 服务器中的所有线程。

整个线程的事情是用一个线程组完成的, 至于文件,我想为每个文件添加一个线程列表(我已经有了一个包装类),并添加了等待某个文件的选项。 但我不认为这是一个很好的解决方案,而且我需要使用一些并发集合,而且我找不到任何只是并发链表。

有任何建议如何实现这个?

1 个答案:

答案 0 :(得分:1)

  

我需要等待所有的选项   结束某个文件的线程

我不明白你的要求,但我认为这样的事情对你有用:

// 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();
        }
    }
}