美文网首页
多线程锁分类 2018-05-14

多线程锁分类 2018-05-14

作者: 码记 | 来源:发表于2018-05-14 21:05 被阅读0次

 多线程锁:

(1) 按照其性质分类:

① 公平锁/非公平锁:是否按照申请锁的顺序来获取锁。有可能会造成优先级反转或者饥饿现象

②乐观锁/悲观锁:看待并发同步的态度

③独享锁/共享锁:是否被多个线程所持有

④互斥锁/读写锁:具体的实现。互斥锁在java中具体实现是ReentrantLock;读写锁在java中具体实现是ReentrantReadWriteLock

⑤ 可重入锁:又称递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁

(2) 按照设计方案来分类:

① 自旋锁/自适应自旋锁:是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁

②锁粗化/锁消除:是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除/减少没必要的加锁

③偏向锁/轻量级锁/重量级锁:锁的状态,并且这对synchronized

④ 分段锁:其实是一种锁的设计,并不是具体的一种锁,通过分段锁的形式实现高效的并发操作

(3) 常见的锁:

Synchronized和Lock

① Synchronized:就是一个非公平、悲观,独享,互斥,可重入的重量级锁

② ReentrantLock,就是一个默认非公平但可实现公平的,悲观,独享,互斥,可重入、重量级锁

ReentrantReadWriteLock,就是一个默认非公平但可实现公平的、悲观、写独享、读独享、读写、可重入、重量级锁

相关文章

网友评论

      本文标题:多线程锁分类 2018-05-14

      本文链接:https://www.haomeiwen.com/subject/mjqsdftx.html