UUID.randomUUID within ThreadLocal



我正在研究以下方法,我想知道将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一样更清楚地区分线程。

最新更新