java - ThreadLocal 中的 UUID.randomUUID

标签 java

我正在查看以下方法,我想知道将 UUID.randomUUID() 放在 ThreadLocal 中是否有意义,或者不会引入无意的开销:

class UUIDUtil {

// TODO: why putting randomUUID into ThreadLocal? Will this avoid contentions?
public static final ThreadLocal<UUID> generator = 
                    ThreadLocal.withInitial(UUID::randomUUID);

}

我应该在 ThreadLocal 中保留 randomUUID 吗?如果是这样,为什么?

如果多个线程想要同时生成 UUID,将 UUID 放入 ThreadLocal 是否可以避免争用?

最佳答案

当您查看 ThreadLocal 的 JavaDoc 时,您会发现一些示例代码可用于为每个线程提供唯一的编号(原始线程 ID 将被重用!!)。

使用此处的代码,您将为每个线程提供一个 UUID 形式的唯一 ID。并且它必须存储在 ThreadLocal 实例中......

如果这有意义,那就是另一回事了,但它对于日志记录很有用,因为它允许您像仅使用线程 ID 一样更清楚地区分线程。

关于java - ThreadLocal 中的 UUID.randomUUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60553309/

相关文章:

java - 将 png 文件绘制到 swing GUI 中时出现问题

java - Android 应用程序启动套接字不工作

java - 在没有 RoundingMode 的情况下检索 BigDecimal 数字中点后的数字

java - JDK 1.6.0 update 45 没有安装 "Public JRE"- 为什么?

java - 是否可以使用 Moxy 将 JSON 对象映射到字符串?

java - 是否弃用了 DTO 模式?

java - 在 Lucene 中处理对相对较小的索引文档的大型搜索查询

java - Singleton bean如何在Spring Boot的不同地方 Autowiring

java - 使用 Jackson 反序列化 JSON

java - Reactor compose 与 flatMap