synchronized和lock比较浅析
synchronized是基于jvm底层实现的数据同步,lock是基于Java编写,主要通过硬件依赖CPU指令实现数据同步。下面一一介绍 一、 synchronized 的实现方案 1. synchronized能够把任何一个非null对象当成锁,实现由两种方式: a.当synchronized作用于非静态方法时,锁住的是当前对象的事例,当synchronized作用于静态方法时,锁住的是class实例,又因为 Class的相关数据存储在永久带,因此静态方法锁相当于类的一个全局锁。 b.当 synchronized作用于一个对象实例时,锁住的是对应的代码块。 2.synchronized锁又称为对象监视器(object)。 3.当多个线程一起访问某个对象监视器的时候,对象监视器会将这些请求存储在不同的容器中。 > Contention List:竞争队列,所有请求锁的线程首先被放在这个竞争队列中 > Entry List: Contention List中那些有资格成为候选资源的线程被移动到 Entry List中 > Wait Set:哪些调用 wait方法被阻塞的线程被放置在这里 > OnDeck:任意时刻,最多只有一个线程正在竞争锁资源,该线程被成为 OnDeck > Owner:当前已经获取到所资源的线程被称为 Owner >