如何保留多线程所需的公共数据



我有一个多线程环境。在这些线程中,我需要进行一些 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((;

最新更新