关于lock和synchronized的选择
2024-08-27 00:50:40
这里不介绍具体用法,介绍lock和synchronized的不同从而做出选择
1.lock是一个接口,而synchronized是java中的一个关键字,synchronized是内置的语言实现。
2.synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而lock在发生异常时,如果没有主动
通过unlock()释放锁,则很可能造成死锁现象。因此使用lock时最好用到try,catch并且在finally块中释放锁。
3.lock可以让等待锁的线程相应中断(使用lock的实现类:ReentrantLock的lockInterruptibly()方法,用
线程对象名+interrupt()中断线程的等待
),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够相应中断。
4.通过lock可以知道有没有成功获取锁(用ReentrantLock的trylock()方法返回布尔值),而synchronized无法办到。
5.lock可以提高多个线程进行读操作的效率,因为lock具有ReentrantReadWriteLock实现类的readLock()返回读锁,
ReentrantReadWriteLock实现类的writeLock()返回写锁。
综合分析:
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),
此使lock的性能远远优于synchronized,所以在具体使用时要根据具体情况选择。
最新文章
- dialog 模块化窗口
- Ubuntu搭建Note.Js 平台
- java Servlet小结
- python学习——将while循环改成函数
- 单位换算(格式化十进制数-B),获取时间工具类CommenUtil
- 首次安装Pycharm出现No Python interpreter selected解决方法
- 【Linux】/dev/null 2>;&;1 详解
- Python - KMP算法
- RPi 2B UART作为调试口或者普通串口
- yii2源码学习笔记(二十)
- 20.org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
- (中等) POJ 3280 Cheapest Palindrome,DP。
- Android基本控件和事件以及消息总结
- Map集合转成json数据
- MySQL高级知识(十四)——行锁
- windows上RSA密钥生成和使用
- 关于 while(1)和for(;;)效率问题的一点想法
- Unity3d实现幸运转盘
- Commons包详解
- Python 列表下标操作
热门文章
- Java PDF转换成图片并输出给前台展示
- 安装ORACLE服务出现Oracle Net Configuration Assistant 失败问题【我】
- C# Web Service 不使用服务引用直接调用方法(转)
- html测试页LODOP的内容反复进入打印设计
- ztree通过id获取节点对象
- git取消追踪本地某个文件
- Ubuntu12.10添加matlab启动器
- SpringCloud用Zookeeper做服务注册与发现中心代码实现
- LeetCode 718. 最长重复子数组(Maximum Length of Repeated Subarray)
- 025 Android 带进度条的对话框(ProgressDialog)