在微服務中需要經常查詢一些共用的東西,比如當前登錄用戶id,不斷跨服務查詢會消耗性能,使用ThreadLocal緩存起來使用更方便
//存:
private ThreadLocal<String> currentUser= new ThreadLocal<>();
currentUser.set(userId);
//使用:
userId=currentUser.get();
//清除:
currentUser.remove();
因爲每個線程可能攜帶不同的userid發起請求,因此在這裏使用ThreadLocal變量存放userid,使得每個線程都有一份自己的副本。
參考官方文檔:ThreadLocal的用法,這個類提供“thread-local”變量,這些變量與線程的局部變量不同,每個線程都保存一份改變量的副本,可以通過get或者set方法訪問。如果開發者希望將類的某個靜態變量(user ID或者transaction ID)與線程狀態關聯,則可以考慮使用ThreadLocal。