多线程应用程序中的日志队列将信息转储到数据库(服务器端应用程序)?
Posted
技术标签:
【中文标题】多线程应用程序中的日志队列将信息转储到数据库(服务器端应用程序)?【英文标题】:Logs queue in multithreaded application which dump information to DB (server side application)? 【发布时间】:2010-10-14 18:15:14 【问题描述】:您能告诉我如何在多线程应用程序中实现队列吗?
我必须在队列中注册我的应用程序中的事件(来自所有用户的事件),我每 100 个事件刷新并保存到数据库中以提高性能。我不想为每个用户提交保存数据库日志。我想提交例如每 100 个数据库事件将比 100 个单次提交更快。我有三个想法:
使用 ThreadLocal 为单个用户使用队列 使用同步的 LinkedList 并不时或每次事件数量刷新您还有其他想法吗?我不使用 log4j,因为我必须将日志保存到数据库 - 而不是文件,哪种方法最好?
【问题讨论】:
不需要自己实现:***.com/questions/1364322/… 【参考方案1】:您可以尝试像 ArrayBlockingQueue
这样的 BlockingQueue 实现。任何线程都可以安全地将事件添加到队列中,并且一个(或多个)线程可以安全地从队列中移除元素。让后台线程等待队列上的事件 (BlockingQueue.take()
)。一旦你收集了 100 个元素,就去做你的事。
【讨论】:
我使用 BlockingQueue 实现了这一点,它正在生产中,而且性能非常好。谢谢。以上是关于多线程应用程序中的日志队列将信息转储到数据库(服务器端应用程序)?的主要内容,如果未能解决你的问题,请参考以下文章