package com.dji.sample.manage.model; import java.util.concurrent.locks.LockSupport; /** * The demo is only for functional closure, which is not recommended. * @author sean.zhou * @date 2021/11/22 * @version 0.1 */ public class Chan { private static final long THREAD_WAIT_TIME = 1000_000 * 500; private volatile T data; private volatile Thread t; private Chan () { } public static Chan getInstance() { return ChanSingleton.INSTANCE; } public T get(Object blocker) { this.t = Thread.currentThread(); LockSupport.parkNanos(blocker, THREAD_WAIT_TIME); this.t = null; return data; } public void put(T data) { this.data = data; if (t == null) { return; } LockSupport.unpark(t); } private static class ChanSingleton { private static final Chan INSTANCE = new Chan<>(); } }