我正在查看以下方法,我想知道将 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/