ConcurrentHolderGetter.java
net.minecraft.core.registries.ConcurrentHolderGetter
信息
- 全限定名:net.minecraft.core.registries.ConcurrentHolderGetter
- 类型:public class
- 包:net.minecraft.core.registries
- 源码路径:src/main/java/net/minecraft/core/registries/ConcurrentHolderGetter.java
- 起始行号:L12
- 实现:HolderGetter
- 职责:
TODO
字段/常量
-
lock- 类型:
Object - 修饰符:
private final - 源码定位:
L13 - 说明:
TODO
- 类型:
-
original- 类型:
HolderGetter<T> - 修饰符:
private final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
elementCache- 类型:
Map<ResourceKey<T>,Optional<Holder.Reference<T>>> - 修饰符:
private final - 源码定位:
L15 - 说明:
TODO
- 类型:
-
tagCache- 类型:
Map<TagKey<T>,Optional<HolderSet.Named<T>>> - 修饰符:
private final - 源码定位:
L16 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ConcurrentHolderGetter(Object lock, HolderGetter<T> original) @ L18
- 构造器名:ConcurrentHolderGetter
- 源码定位:L18
- 修饰符:public
参数:
- lock: Object
- original: HolderGetter
说明:
TODO
方法
下面的方法块按源码顺序生成。
public Optional<Holder.Reference<T>> get(ResourceKey<T> elementId) @ L23
- 方法名:get
- 源码定位:L23
- 返回类型:Optional<Holder.Reference
> - 修饰符:public
参数:
- elementId: ResourceKey
说明:
TODO
public Optional<HolderSet.Named<T>> get(TagKey<T> tagId) @ L32
- 方法名:get
- 源码定位:L32
- 返回类型:Optional<HolderSet.Named
> - 修饰符:public
参数:
- tagId: TagKey
说明:
TODO
代码
public class ConcurrentHolderGetter<T> implements HolderGetter<T> {
private final Object lock;
private final HolderGetter<T> original;
private final Map<ResourceKey<T>, Optional<Holder.Reference<T>>> elementCache = new ConcurrentHashMap<>();
private final Map<TagKey<T>, Optional<HolderSet.Named<T>>> tagCache = new ConcurrentHashMap<>();
public ConcurrentHolderGetter(Object lock, HolderGetter<T> original) {
this.lock = lock;
this.original = original;
}
@Override
public Optional<Holder.Reference<T>> get(ResourceKey<T> elementId) {
return this.elementCache.computeIfAbsent(elementId, id -> {
synchronized (this.lock) {
return this.original.get((ResourceKey<T>)id);
}
});
}
@Override
public Optional<HolderSet.Named<T>> get(TagKey<T> tagId) {
return this.tagCache.computeIfAbsent(tagId, id -> {
synchronized (this.lock) {
return this.original.get((TagKey<T>)id);
}
});
}
}引用的其他类
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段/实现
- 引用位置:
-
- 引用位置:
字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: