当然,使用“synchronized”的方式显然很明显。 但我创建了一个系统,设计用于在多个内核上运行,并在相同的毫秒内向该文件写入不同的次数。因此,我认为使用同步会严重损害性能。 我正在考虑使用Java的管道类(但不知道它是否会有所帮助) 或让每个线程写入不同的文件以及收集 这些写入的附加线程,从而创建最终结果。 我应该提到的是,文章的顺序并不重要,无论如何它都以时间戳 。 这两个更好的想法是什么?有没有其他建议? 谢谢。将几个线程同步写入到java中的同一个文件中
1
A
回答
2
使用某种同步(例如单个互斥锁)很容易实现。
如果我有足够的RAM,我想创建某种为每个登录生产者线程一个队列,日志消费者线程在一个循环的方式所有队列读取(或类似的东西) 。
1
不是你的问题的直接答案,但logback项目内置同步功能,用于从不同线程写入同一个文件,所以如果它适合你的需要,或者至少需要一个看看它的源代码。由于它是为速度而构建的,所以我非常肯定实现不被视为理所当然。
1
如果您担心,您将无法将所有线程写入同一个文件而没有性能问题。当我遇到这个问题(编写自己的日志记录,回到Log4j之前),我在内存中创建了两个固定大小的缓冲区,并让所有生产者线程写入一个缓冲区,同时从另一个缓冲区读取专用的使用者线程,写信给一个文件。这样,写入线程只需在获取索引和将索引递增到缓冲区并同步缓冲区时进行同步,并且只在当前缓冲区满时阻塞。这是内存密集型,但速度很快。
对于其他想法,你可以看看Log4j和Logback这样的记录器如何工作,他们将不得不解决这个问题。
1
尝试使用JMS。您在不同机器上运行的所有进程都可能发送JMS消息,而不是写入文件。只创建一个接收消息并将它们写入文件的队列接收器。 Log4J已经具有这种功能:请参阅JMSAppender。
相关问题
- 1. 同时写入JAVA中的多个线程的单个文件,按行同步
- 2. 找到几个文件共同的线
- 3. java中的线程/同步
- 4. 在java中同步线程
- 5. 在Java线程中同步
- 6. jquery同步几个事件
- 7. 在同一文本文件上写入Java多个程序
- 8. 多个线程可以同时将数据写入文件吗?
- 9. Java多个文件不同的线程
- 10. Java同步线程
- 11. Java线程同步
- 12. Java线程“同步”
- 13. 同步两个只有几个文件不同的GIT分支
- 14. 多个RollingFileAppenders写入同一个文件
- 15. 如何将多个线程同步到一个公共点
- 16. 防止线程写入同一个文件
- 17. 同时写入,分成几个文件,不同长度
- 18. 在java中读取和写入同一个文件
- 19. 同步.NET中的多个线程4
- 20. 是否可以从多个线程写入同一文件的不同部分?
- 21. java多线程(newCachedThreadPool),然后将结果写入一个文件?
- 22. 在同一个锁中的几个线程
- 23. 将几个sqlite数据库同步到一个mysql数据库
- 24. 同步线程中的同步问题
- 25. 为Clojure中的多个阅读器/单个写入器同步线程
- 26. 用不同的过程在同一个文件中读写
- 27. 线程池中的多个线程在同一列表中写入数据
- 28. 将输出写入到Talend ETL中的同一个xml文件中
- 29. java中的线程同步问题
- 30. 什么是java中的线程同步?
您需要指定您以后的速度,吞吐量或等待时间。你需要在1ms内写入10k m/s或任何给定的消息吗?另外,如果你关心磁盘写入的可靠性(你可以承受在处理崩溃时延迟写入)。 – DaveC 2010-12-11 03:03:37