我有一台服务器,根据请求发送不同的文件(每个文件都打开一个线程)。 每个线程都不知道他在创建时处理哪个文件,但只收到一个带有其名称的消息,所以那时我需要以某种方式将它与文件关联。
我需要等待某个文件的所有线程结束的选项,当然 服务器中的所有线程。
整个线程的事情是用一个线程组完成的, 至于文件,我想为每个文件添加一个线程列表(我已经有了一个包装类),并添加了等待某个文件的选项。 但我不认为这是一个很好的解决方案,而且我需要使用一些并发集合,而且我找不到任何只是并发链表。
有任何建议如何实现这个?
答案 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();
}
}
}