多个作者的并发列表是哪一个读者?

时间:2017-05-24 06:57:11

标签: java multithreading concurrency java.util.concurrent

我正在为多个线程实现日志记录,每个线程都会写入oldmethod(string, string, string, string)。所有线程完成后,我将把List的内容转储到一个文件中。我应该使用哪个并发List实现? 我在考虑ConcurrentLinkedQueue

  • 写入将是并发的,但在所有其他线程完成写入之后,读取将由一个线程完成。

我可以为每个线程使用List但是我会有管理多个List的开销,我不确定它是否值得。另一种选择是synchronized List

奖金问题:如何让最后一个帖子将列表转储到文件中?请参阅Multiple threads arrive, the last should do the processing

2 个答案:

答案 0 :(得分:1)

请 - 不要

Java已内置logging framework,并且可完全自定义以创建不同的处理程序和格式化程序。如果你不喜欢标准的Java日志框架,无论出于什么原因,还有很多其他的可用。所有这些框架都处理并发。

随着你花费时间创建一个已经存在并且已经存在很长时间的框架,你可以创建一些为世界增添新东西的东西。

答案 1 :(得分:0)

如果事实上可以保证任何读取队列的尝试都会发生"一旦所有其他线程完成写入"那么你根本不需要一个并发队列。

您所需要的只是一个普通的,普通的,非并发的队列,以及一个"日志条目消费者的工厂"它将日志条目使用者分配给需要写入队列的每个线程。

使用者隐藏了队列,因此线程唯一可以做的就是附加到队列中。消费者的实现只是保证了对队列插入点的同步访问。

然后不需要同步队列,因为如果只是要读取"在所有其他线程完成写入之后#34;显然,在阅读时不会发生并发访问。

已经说过:

  • 你确定"在所有其他线程完成写入之后#34;部分

  • 你如何定义"所有其他线程都已完成写作"?

  • 你怎么知道"所有其他线程都已写完"?

  • 为什么重要的是,只有在&#34之后才能读取列表;所有其他线程都已完成写入"?