问题描述
- log4j日志存入数据库的多线程并发问题
- 我使用Mina框架来接收多线程的数据,当我想取得创建时间(从sessionCreated()方法获得)、session的上下文信息(从messageReceived()方法获得)以及断开时间(从sessionClosed()方法获得)的时候,我使用log4j的MDC来输出到数据库。可是问题来了,因为要取得断开时间,必须得第一个线程断开后触发sessionClosed()方法取得断开时间后才能将第一个线程的所有信息才会存入到数据库;但是当第一个线程没断开,第二个线程就进来了发送数据,而且马上触发sessionClosed()线程,那么它就覆盖了第一个线程的信息了。使得本来属于第一个线程的信息取不到了。其中我使用ConcurrentHashMap来存储进入数据库前的信息 。不知道有什么更好的方法可以解决呢?
解决方案
数据库可以共享同一个连接,然后你写入数据库,由数据库自己来做数据并发处理
解决方案二:
线程不要操作全局数据,或者做互斥
解决方案三:
不然就把数据放不同的队列
时间: 2024-10-04 15:28:16