[英]unique id in java thread
我的应用程序使用一个日志记录组件,该组件需要跟踪每个调用的唯一标识符。
我的出发点是一个MDB,它显然会启动对几个类的一系列方法调用。 每个类都创建一个类似于log4j的新记录器对象,并使用该对象将事件记录到数据库中。 并且为每个创建的记录器对象分配一个唯一的标识符。 该标识符应跟随该线程,直到后续调用全部返回并且MDB中的onMessage方法终止。
问题在于,在处理一个JmsMessage期间,MDB接收到另一条消息,并且我的ID混杂在一起。
我已经把头撞在桌子上了一段时间,我想答案就在我的眼前,但是你有什么主意吗? 我如何确保一个“进程”可以使用其自己的ID进行记录,即使在第一个进程完成之前就启动了另一个进程?
先感谢您。
您有不能使用Message.getJMSMessageID()
的原因吗?
如果有的话,那么它应该就是AtomicLong.incrementAndGet()
。 保留一个静态实例,并在MDB的onMessage()
方法中获取一个ID,并在处理消息时保留它(可能在ThreadLocal
)。
通常您要使用“友好”名称
String name = Thread.currentThread().getName();
但是,这可能不是唯一的或没有意义的,在这种情况下,您可以使用唯一的ID。
int id = Thread.currentThread().getId();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.