在多线程应用程序中记录队列,将信息转储到DB(服务器端应用程序)?

时间:2010-10-14 18:15:14

标签: java multithreading performance logging server-side

你能告诉我如何在多线程应用程序中实现队列。

我必须在我的应用程序中注册队列中的事件(来自所有用户的事件),我每隔100个事件刷新并保存到数据库以提高性能。我不想为每个用户提交保存数​​据库日志。我想提交e.x.每100个事件到数据库将比100个单一提交更快。我有三个想法:

     
  • 使用ThreadLocal
  •  
  • 为单个用户使用队列
  •  
  • 使用synchronized LinkedList并不时刷新或每个事件数

你还有其他想法吗?我不使用log4j,因为我必须将日志保存到数据库 - 而不是文件,哪种方法最好?

1 个答案:

答案 0 :(得分:2)

您可以尝试像ArrayBlockingQueue这样的BlockingQueue实现。任何线程都可以安全地将事件添加到队列中,并且一个(或多个)线程可以安全地从队列中删除元素。让后台线程等待队列中的事件(BlockingQueue.take())。一旦你收集了100个元素,就做你的东西。