它应该在停放它之前优雅地减慢线程。
我尝试了旋转,Thread.yield()
并且LockSupport.parkNanos(1L)
:
def backOff() {
backOffs += 1
if (backOffs <= spinCount) () // spin
else if (backOffs <= spinCount + yieldCount) Thread.`yield`()
else if (backOffs <= spinCount + yieldCount + parkNanosCount) LockSupport.parkNanos(1L)
else {
waitingThreads.add(Thread.currentThread())
LockSupport.park(this)
backOffs = 0
}
}
还有其他方法吗?
寻找适用于不同操作系统和环境上的大多数 JVM 1.6+ 的回退实现。