解答
同步对性能最大的影响是阻塞,挂起和恢复线程的操作都需要转入内核态完成。
许多应用上共享数据的锁定只会持续很短的时间,为了这段时间去挂起和恢复线程并不值得。
如果机器有多个处理器核心,我们可以让后面请求锁的线程稍等一会,但不放弃处理器的执行时间,看看持有锁的线程是否很快会释放锁。
为了让线程等待只需让线程执行一个忙循环,这项技术就是自旋锁。
自旋锁在 JDK1.4 就已引入,默认关闭,在 JDK6 中改为默认开启。自旋不能代替阻塞,虽然避免了线程切换开销,但要占用处理器时间,如果锁被占用的时间很短,自旋的效果就会非常好,反之只会白白消耗处理器资源。
如果自旋超过了限定的次数仍然没有成功获得锁,就应挂起线程,自旋默认限定次数是 10。
简直是我梦想中的offer,好想去上班