先设想一个场景,你中午吃饭,不知道吃什么好,想着去食堂吃呢还是点外卖,但是因为公司愿意食堂不一定每次都开门,于是你跟同事说,这样吧你去食堂,如果开门了你告诉我我就过去,如果没有开门我就点外卖。
这就是一个等待回调问题,你做一个事件A,中间 需要等待事件B的回调结果,才可以继续下一步。
开发中这样的场景很多吧。那么如何解决能?
别告诉我,写一个死循环,while() 然后 sleep 然后 break
这样肯定不对的。一个是 你时间上有时间差,也并发的情况下会造成死循环。
那么如何优雅解决回调等待问题? 直接自己跑一下
上代码:
import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Predicate; public class GuardedObject<T> { //受保护的对象 T obj; final Lock lock = new ReentrantLock(); final Condition done = lock.newCondition(); final int timeout = 2; //保存所有GuardedObject final static Map<Obj