我目前正在编写一个记录器(例如使用java记录器),用它我可以将 Activity (信息、错误)记录到文件中。这个(静态)记录器类由多个线程和进程使用。
如果我只有一个日志文件,那么线程就会被阻塞,这是对的吗?那么只有一个线程可以写入该文件?
另一种解决方案是为每个线程提供一个自己的日志文件,但这会有点困惑。
因此,我考虑首先将日志保存在流中(也许每个线程一个),并且仅在程序结束时将所有内容写入文件。
这是最好的方法吗?我怎样才能实现这个目标?
最佳答案
您可以尝试在程序末尾将所有内容写入文件,但这可能会使用大量内存,并且通常需要实现记录器,以便它们仍然会记录大部分/全部数据,以防万一程序崩溃或其他意外终止。
作为替代方案,您可以使用并发队列来记录消息,例如一个LinkedBlockingQueue或 ConcurrentLinkedQueue ,其中多个线程将消息写入队列,单个线程从队列读取消息并将消息写入文件。使用 BlockingQueue
,日志记录线程可以在队列上调用 take
或 poll(timeout, TimeUnit)
,使线程 hibernate ,直到消息变为可用的;使用ConcurrentLinkedQueue,您可以让日志记录线程 hibernate 十秒钟,然后醒来,将队列刷新到文件,然后再 hibernate 十秒钟。在任何一种情况下,生成记录消息的线程都不会阻塞。
关于Java并发日志记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26192322/