很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等
待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核
态切换的问题。既然 synchronized 里面的代码执行得非常快,不妨让等待锁的线
程不要被阻塞,而是在 synchronized 的边界做忙循环,这就是自旋。如果做了多
次忙循环发现还没有获得锁,再阻塞,这样可能是一种更好的策略。