package tech.powerjob.worker.common; import tech.powerjob.worker.persistence.TaskDO; import java.util.concurrent.atomic.AtomicLong; /** * 存储一些不方便直接传递的东西 * #attention:警惕内存泄漏问题,执行完毕后手动释放 * * @author tjq * @since 2020/3/18 */ public class ThreadLocalStore { private static final ThreadLocal TASK_THREAD_LOCAL = new ThreadLocal<>(); private static final ThreadLocal RUNTIME_META_LOCAL = new ThreadLocal<>(); private static final ThreadLocal TASK_ID_THREAD_LOCAL = new ThreadLocal<>(); public static TaskDO getTask() { return TASK_THREAD_LOCAL.get(); } public static void setTask(TaskDO task) { TASK_THREAD_LOCAL.set(task); } public static WorkerRuntime getRuntimeMeta() { return RUNTIME_META_LOCAL.get(); } public static void setRuntimeMeta(WorkerRuntime workerRuntime) { RUNTIME_META_LOCAL.set(workerRuntime); } public static AtomicLong getTaskIDAddr() { if (TASK_ID_THREAD_LOCAL.get() == null) { TASK_ID_THREAD_LOCAL.set(new AtomicLong(0)); } return TASK_ID_THREAD_LOCAL.get(); } public static void clear() { TASK_ID_THREAD_LOCAL.remove(); RUNTIME_META_LOCAL.remove(); TASK_THREAD_LOCAL.remove(); } }