不放弃CPU时间
线程获取不到锁,就会被阻塞挂起,等其他线程释放锁的时候,才被唤醒起来。线程挂起和唤醒是需要转入到内核态完成的,这些操作对系统的并发性能会带来影响。其实有时候线程虽然没法立刻获取到锁,但是也可能很快就会获取到锁。
能不能给多些机会让获取不到锁的线程在CPU里多待上一段时间,尝试去获取锁。因为线程对共享数据的锁定可能只是持续一小段时间而已,之后便会释放资源锁。
JVM采用了一种叫自旋锁的机制,让获取不到锁的线程执行一个空的循环,一段时间后,如果还是没法获取锁,线程才会被挂起。
如果锁竞争不严重的情况下,且任务执行时间不长,那么可以尝试使用自旋锁。
自旋锁缺点
如果线程执行的任务需要非常长的时间,或者线程对共享数据的竞争相当激烈,那么使用自旋锁的效率就很低。因为自旋的过程中,一直无法获取到锁,一直在白白的浪费CPU的资源。