队列的并发映射

时间:2017-11-08 15:00:01

标签: java multithreading concurrency

我试图实现一个队列映射,在每个工作程序完成处理后由多个线程附加。

一旦所有线程都完成执行,我想使用队列中的信息写入文件。

到目前为止,我试图创建一个并发映射:

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,它被正确地附加到它应该正常工作 - 问题是我需要键入对应于每个队列的值来确定输出文件写信给。

有什么想法吗?

非常感谢, 萨姆

0 个答案:

没有答案