All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fastasyncworldedit.core.util.collection.CleanableThreadLocal Maven / Gradle / Ivy

Go to download

Blazingly fast Minecraft world manipulation for artists, builders and everyone else.

There is a newer version: 2.9.2
Show newest version
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();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy