java线程中的唯一id

时间:2012-01-18 21:13:50

标签: java multithreading unique synchronized identifier

我的应用程序使用日志记录组件,该组件需要跟踪每个呼叫的唯一标识符。

我的出发点是一个MDB,显然会向几个类启动一系列方法调用。 每个类创建一个新的logger对象,类似于log4j,并使用它来将事件记录到数据库。对于创建的每个记录器对象,都会为其分配唯一标识符。此标识符应遵循该线程,直到后续调用全部返回并且MDB中的onMessage方法终止。

问题是在处理一个JmsMessage期间,MDB收到另一条消息,我的ID混淆了。

我一直在桌子上撞了一段时间,我觉得答案就在我面前,但你有什么想法吗?如何确保一个“进程”可以使用自己的ID进行记录,即使另一个进程在第一个进程完成之前已经启动了?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

是否有理由不能使用Message.getJMSMessageID()

如果有,AtomicLong.incrementAndGet()应该是全部。保留一个静态实例,并在MDB的onMessage()方法中获取一个ID并在处理消息时保留它(可能在ThreadLocal中)。

答案 1 :(得分:1)

通常你想使用“友好”的名字

String name = Thread.currentThread().getName();

但是,这可能不是唯一或有意义的,在这种情况下,您可以使用唯一ID。

int id = Thread.currentThread().getId();