Synchronized 与Lock的不同之处
2024-10-20 17:24:06
Synchronized 与Lock的不同之处
用法不一样。synchronized既可以加在方法上,也可以加载特定的代码块上,括号中表示需要锁的对象。而Lock需要显示地指定起始位置和终止位置。synchronzied是托管给jvm执行的,Lock锁定是通过代码实现的。
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。
锁的机制不一样。synchronized获得锁和释放的方式都是在块结构中,而且是自动释放锁。而Lock则需要开发人员手动去释放,并且必须在finally块中释放,否则会引起死锁问题的发生。
Lock是一个接口,不是Java语言内置的;synchronized是Java语言的关键字,因此是内置特性。
采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后或者出现异常时,系统会自动让线程释放对锁的占用;而Lock在发生异常时,如果没有主动通unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;
Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。Lock可以提高多个线程进行读操作的效率。
最新文章
- WebWorker的importScripts方法
- noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15
- asp.net MVC SignalR 与数据库 实时同步显示
- 配置rc.local开机自启动文件的疑问
- 20145227《Java程序设计》课程总结
- windows下安装laravel简单步骤以及碰到的问题
- Eclipse小技巧<;一>;
- android3.2以上切屏禁止onCreate()
- [jQuery编程挑战]008 生成逗号分隔数字
- lucene3.6笔记添加搜索功能
- [C#参考]主线程和子线程之间的参数传递
- Java TreeSet集合排序 &;&; 定义一个类实现Comparator接口,覆盖compare方法 &;&; 按照字符串长度排序
- MicroPython开发板:TPYBoard v102 播放音乐实例
- ping通windows下虚拟机上的linux系统
- 【转】【机器学习】R 正则化函数 scale
- 面试 5:手写 Java 的 pow() 实现
- Mybatis的延迟加载和缓存
- AnyConnect无法与指定的安全网关建立连接(转)
- Codeforces 994F Compute Power 二分+DP
- C#开发者工具网
热门文章
- 03-树2 List Leaves (25 分)
- Maven 打包报错,log4j版本导致
- IDEA中设置自动build-改动代码,不用重启工程,刷新页面即可
- ubuntu之路——day15.2 只用python的numpy在底层检验正则化对模型的影响
- Single Cell Genomics Day: A Practical Workshop
- 如何连接到远程windows服务器
- Python高级笔记(十一)装饰器【面试】
- oracle plsql 异常
- PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)
- python:使用Djangorestframework编写post和get接口