ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

锁对比

2020-11-13 14:03:41  阅读:227  来源: 互联网

标签:lock ReentrantLock 线程 公平 Semaphore 方法 对比


锁对比

一、公平锁与非公平锁

  公平锁指的是锁的分配机制是公平的,通常是先到先得,RenntrantLock可以在构造函数中定义公平和非公平

  非公平锁,随机、就近原则分配锁的机制,线程过来后会先自旋,尝试直接获取到锁,获取不到再去排队。非公平锁的效率要更高。

二、ReentrantLock和Synchronized

  lock通过lock()和unlock()来进行加锁和解锁的操作,synchronized会被jvm自动解锁。

  lock的优势是可中断、公平锁、多个锁。

三、Condition和Object类锁方法区别

  Condition是lock锁里面的类。

  1. Condition 类的 awiat 方法和 Object 类的 wait 方法等效   2. Condition 类的 signal 方法和 Object 类的 notify 方法等效   3. Condition 类的 signalAll 方法和 Object 类的 notifyAll 方法等效   4. ReentrantLock 类可以唤醒指定条件的线程,而 object 的唤醒是随机的

四、tryLock 和 lock 和 lockInterruptibly 的区别

  tryLock能获得锁返回true,不能就立即返回false,还可以增加时间限制,超过时间没有获得锁(定时),返回false   lock是能获得返回true、不能就一直等待获得锁。   lock和lockinterruptibly,lock中断不会报错,lockinterruptibly中断会报错。

五、Semaphore信号量

  Semaphore是一种基于计数的信号量,可以设定阈值,来限定线程,多个线程来竞争获取许可信号,做完自己的申请后归还,超过阈值的线程,将被阻塞。可以用来构建对象池、资源池、数据库连接池。   实现互斥锁(计数器为 1)   我们也可以创建计数为 1 的 Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,   表示两种互斥状态

5.1、Semaphore 与 ReentrantLock

  Semaphore 基本能完成 ReentrantLock 的所有工作,使用方法也与之类似,通过 acquire()与 release()方法来获得和释放临界资源。经实测,Semaphone.acquire()方法默认为可响应中断锁, 与 ReentrantLock.lockInterruptibly()作用效果一致,也就是说在等待临界资源的过程中可以被 Thread.interrupt()方法中断。   此外,Semaphore 也实现了可轮询的锁请求与定时锁的功能,除了方法名 tryAcquire 与 tryLock 不同,其使用方法与 ReentrantLock 几乎一致。Semaphore 也提供了公平与非公平锁的机制,也 可在构造函数中进行设定。   Semaphore 的锁释放操作也由手动进行,因此与 ReentrantLock 一样,为避免线程因抛出异常而 无法正常释放锁的情况发生,释放锁的操作也必须在 finally 代码块中完成   

标签:lock,ReentrantLock,线程,公平,Semaphore,方法,对比
来源: https://www.cnblogs.com/gushiye/p/13968992.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有