概念: 我们知道有活锁 死锁,活锁里面有悲观锁和乐观锁
1.悲观锁,我的理解是两个男孩张三和李四,在约同一个女孩恋爱,每次都是张三约成功了,李四不成功,所有李四有点悲催,他就是一个悲观锁,
对于程序来说同一个资源,两个线程去占用,但是没有都是一个线程对资源占用,另一个无法占用,Synchronized。
2.乐观锁,我的理解是两个男孩张三和李四,在约同一个女孩恋爱,都可以约到,但是女孩同时只能约一个,只能在一个约完了另一个才可以约。
对于程序来说同一个资源,两个线程去占用,一次只能是一个线程去占用资源,在Java中,CAS是乐观锁的,但是为了防止ABA问题,又加了时间版本来防止ABA问题。
3.死锁 我的理解是两个男孩张三和李四,在约同一个女孩恋爱,但是女孩答应了两个人,于是两个人开车来接,可是在十字路口,两个人你不让我,我不让你,最后都约不到。
锁会带来CUP上下文的切换,影响效率。
在Java中,每个对象都有一个mark标记,
图片来源:ifeve.com/java-synchronized/%E8%BD%BB%E9%87%8F%E7%BA%A7%E9%94%81/