有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java线程中的多线程唯一id

我的应用程序使用一个日志组件,它需要跟踪每个调用的唯一标识符

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

问题是,在处理一条JMS消息的过程中,MDB接收到另一条消息,我的ID被弄混了

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

先谢谢你


共 (2) 个答案

  1. # 1 楼答案

    你为什么不能使用^{}

    如果有,^{}应该是所有需要的。保留一个静态实例,然后在MDB的onMessage()方法中获取一个ID,并在处理消息时保留它(可能在ThreadLocal中)

  2. # 2 楼答案

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

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

    然而,这可能不是唯一的或有意义的,在这种情况下,您可以使用唯一的id

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