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