我正在为多个线程实现日志记录,每个线程都会写入oldmethod(string, string, string, string)
。所有线程完成后,我将把List
的内容转储到一个文件中。我应该使用哪个并发List
实现?
我在考虑ConcurrentLinkedQueue。
我可以为每个线程使用List
但是我会有管理多个List
的开销,我不确定它是否值得。另一种选择是synchronized List。
奖金问题:如何让最后一个帖子将列表转储到文件中?请参阅Multiple threads arrive, the last should do the processing。
答案 0 :(得分:1)
请 - 不要。
Java已内置logging framework,并且可完全自定义以创建不同的处理程序和格式化程序。如果你不喜欢标准的Java日志框架,无论出于什么原因,还有很多其他的可用。所有这些框架都处理并发。
随着你花费时间创建一个已经存在并且已经存在很长时间的框架,你可以创建一些为世界增添新东西的东西。
答案 1 :(得分:0)
如果事实上可以保证任何读取队列的尝试都会发生"一旦所有其他线程完成写入"那么你根本不需要一个并发队列。
您所需要的只是一个普通的,普通的,非并发的队列,以及一个"日志条目消费者的工厂"它将日志条目使用者分配给需要写入队列的每个线程。
使用者隐藏了队列,因此线程唯一可以做的就是附加到队列中。消费者的实现只是保证了对队列插入点的同步访问。
然后不需要同步队列,因为如果只是要读取"在所有其他线程完成写入之后#34;显然,在阅读时不会发生并发访问。
已经说过:
你确定"在所有其他线程完成写入之后#34;部分子>
你如何定义"所有其他线程都已完成写作"? 子>
你怎么知道"所有其他线程都已写完"?
为什么重要的是,只有在&#34之后才能读取列表;所有其他线程都已完成写入"?