随笔分类 -  常见的lock

摘要:偏向锁: 在线程获取偏向锁的时候, jvm会判断锁对象MarkWord里偏向线程的ID是否为当前线程ID。 如果是,则说明当前锁对象处于偏向状态。 如果不是,则jvm尝试CAS把对象的MarkWord的偏向线程ID设置为当前线程ID, 如果设置成功,那么对象偏向当前线程,并将当对象的锁标志位改为01 阅读全文
posted @ 2020-04-26 11:41 IT路上的小白 阅读(710) 评论(0) 推荐(0)
摘要:乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类 阅读全文
posted @ 2020-04-21 14:37 IT路上的小白 阅读(174) 评论(0) 推荐(0)
摘要:独占锁:独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程即能读数据又能修改数据。 ReentrantLock 和 synchronized 都是独占锁 共享锁:共享锁是指该锁可被多个线程所持有。如果线程T对数据A 阅读全文
posted @ 2020-04-21 14:12 IT路上的小白 阅读(2017) 评论(0) 推荐(0)
摘要:自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,如果长时间使用这种锁会造成系统负载很大,耗费性能,阻止了其他线程的运行和 阅读全文
posted @ 2020-04-21 13:55 IT路上的小白 阅读(899) 评论(0) 推荐(0)
摘要:可重入锁,也叫递归锁 可重入锁:指的是同一个线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁 种类:ReentrantLock 和 synchronized 都是可重入锁 作用:避免死锁 注意点:用了锁,一定要记得开锁和关锁,lo 阅读全文
posted @ 2020-04-21 13:16 IT路上的小白 阅读(511) 评论(0) 推荐(0)
摘要:公平锁与非公平锁 # 公平锁与非公平锁公平锁:多个线程按照申请锁的顺序来获取锁,先来后到,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程等待队列的第一个,就占有锁,否则就会加入到等待队列,以后会按照FIFO的规则从队列中取。 非公平锁:多个线程获取锁的顺序并不是按 阅读全文
posted @ 2020-04-21 11:19 IT路上的小白 阅读(687) 评论(0) 推荐(0)