Jpalany
2015-01-08 08:30
采纳率: 66.7%
浏览 2.2k
已采纳

log4j日志存入数据库的多线程并发问题

我使用Mina框架来接收多线程的数据,当我想取得创建时间(从sessionCreated()方法获得)、session的上下文信息(从messageReceived()方法获得)以及断开时间(从sessionClosed()方法获得)的时候,我使用log4j的MDC来输出到数据库。可是问题来了,因为要取得断开时间,必须得第一个线程断开后触发sessionClosed()方法取得断开时间后才能将第一个线程的所有信息才会存入到数据库;但是当第一个线程没断开,第二个线程就进来了发送数据,而且马上触发sessionClosed()线程,那么它就覆盖了第一个线程的信息了。使得本来属于第一个线程的信息取不到了。其中我使用ConcurrentHashMap来存储进入数据库前的信息 。不知道有什么更好的方法可以解决呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • oyljerry 2015-01-08 11:19
    已采纳

    数据库可以共享同一个连接,然后你写入数据库,由数据库自己来做数据并发处理

    点赞 打赏 评论
  • oyljerry 2015-01-08 13:48

    线程不要操作全局数据,或者做互斥

    点赞 打赏 评论
  • oyljerry 2015-01-08 13:49

    不然就把数据放不同的队列

    点赞 打赏 评论

相关推荐