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