我有一个多线程环境。在这些线程中,我需要进行一些 http 调用。这是一个现有的代码。 现在的新要求是我需要将令牌传递给这些调用。所以我需要将此令牌保存在某个地方,并需要在通话期间获取它。
所以我的问题是保留令牌的最佳实现是什么。
我可以将令牌存储在某个单例类中并从那里获取值。这种方法的优点/缺点是什么。
提前感谢。
无论在哪里存储它,都需要将其存储在线程安全内存中。 例如,您可以将用于存储它的变量声明volatile
。
为了便于访问,您可以使用单例,但方便类中的静态变量可能更容易。
如果我正确理解您的问题,您想从父线程生成一些令牌,那么您可以在 Http 请求期间在子线程中使用。
可以使用以下方法。可以使用 InheritableThreadLocal 变量来存储令牌,然后子线程可以安全地使用它。
public class ThreadContext {
private static ThreadLocal<String> currentThread = new InheritableThreadLocal<>();
public static String getCurrentThread() {
return currentThread.get();
}
public static void setCurrentThread(String tenant) {
currentThread.set(tenant);
}
public static void clear() {
currentThread.set(null);
}
}
可以使用 ThreadContext.setCurrentThread(String tenant( 方法设置令牌。在子线程中,您可以使用 ThreadContext.getCurrentThread((;