com.fastasyncworldedit.core.util.collection.CleanableThreadLocal Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of FastAsyncWorldEdit-Core Show documentation
Show all versions of FastAsyncWorldEdit-Core Show documentation
Blazingly fast Minecraft world manipulation for artists, builders and everyone else.
package com.fastasyncworldedit.core.util.collection;
import java.io.IOException;
import java.util.concurrent.atomic.LongAdder;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class CleanableThreadLocal extends ThreadLocal implements AutoCloseable {
private final Supplier supplier;
private final Function modifier;
private final LongAdder count = new LongAdder(); // what is that supposed to do?
public CleanableThreadLocal(Supplier supplier) {
this(supplier, Function.identity());
}
public CleanableThreadLocal(Supplier supplier, Consumer modifier) {
this(supplier, t -> {
modifier.accept(t);
return t;
});
}
public CleanableThreadLocal(Supplier supplier, Function modifier) {
this.supplier = supplier;
this.modifier = modifier;
}
@Override
protected final T initialValue() {
T value = modifier.apply(init());
if (value != null) {
count.increment();
}
return value;
}
public T init() {
return supplier.get();
}
public void clean() {
remove();
}
@Override
public void close() throws IOException {
clean();
}
}