机制:每个锁都关联一个请求计数器和一个占有他的线程,当请求计数器为0时,这个锁可以被认为是unhled的,当一个线程请求一个unheld的锁时,JVM记录锁的拥有者,并把锁的请求计数加1,如果同一个线程再次请求这个锁时,请求计数器就会增加,当该线程退出syncronized块时,计数器减1,当计数器为0时,锁被释放. java锁的可重入性机制可以解决下面这个问题: public class Widget { public synchronized void doSomething() { …
锁的种类 独享锁 VS 共享锁 独享锁:锁只能被一个线程持有(synchronized) 共享锁:锁可以被多个程序所持有(读写锁) 乐观锁 VS 悲观锁 乐观锁:每次去拿数据的时候都乐观地认为别人不会修改,所以不进行加锁操作.乐观锁适用于多读的应用类型.(CAS,Atomic) CAS(Compare And Swap),其思想是:我认为V的值应该为 A,如果是,那么将 V 的值更新为 B,否则不修改并告诉V的值实际为多少.这样一来当有多个线程尝试修改同一个对象时,只有一个线程能够成功修改,因为…