我试图实现一个队列映射,在每个工作程序完成处理后由多个线程附加。
一旦所有线程都完成执行,我想使用队列中的信息写入文件。
到目前为止,我试图创建一个并发映射:
ConcurrentMap<String, Queue<String>> map = new ConcurrentHashMap<>();
和并发链接队列的哈希映射:
Map<String, ConcurrentLinkedQueue<String> map = new HashMap<>();
添加到地图:
for(File f : dir.listFiles(){
map.put(f.getName(), new ConcurrentLinkedQueue<>());
}
要添加到线程中的地图的代码,我遍历所有队列以检查条件的键值:
for(Map.Entry<String, Queue<String>> entry : queueListInThread.entrySet(){
if(entry.getKey().equals(/*fileName from the thread */) entry.getValue().add(someString);
}
用于在Manager中获取队列值的代码,循环遍历所有队列并提取所有值:
for(Map.Entry<String, Queue<String>> entry : map.entrySet(){
String line;
while((line = entry.getValue().poll()) != null{
//do stuff with the value
}
}
这些方法似乎都不起作用,尽管确认线程正确地添加到队列中,但当我遍历地图以查找每个队列中的条目时,队列的大小为0.
除了我拥有的代码之外,我已经实现了一个ConcurrentLinkedQueue
,它被正确地附加到它应该正常工作 - 问题是我需要键入对应于每个队列的值来确定输出文件写信给。
有什么想法吗?
非常感谢, 萨姆