多线程请求后台资源,ReentrantLock锁定业务代码只执行一次

1、使用ReentrantLock 的

tryLock() 方法,能拿到锁可以直接返回true,拿不到直接返回false,还可以使用带参数的超时时间tryLock(time,timeunit) 方法,具体场景具体使用。

2、首先获取锁,获取不到就表示有其他线程在执行,那么会进入到else,这里设置了一个自旋去等待这个锁的释放,并且设置了一个自旋超时时间,防止大量请求消耗资源。这样就是只有一个线程在执行,其他线程等待结果就可以,异常情况暂不考虑

还有 wati 和 notifyall 方案 也可以实现后台业务代码只执行一次。