繁体   English   中英

Java线程中的唯一ID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM