博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
阅读量:6956 次
发布时间:2019-06-27

本文共 616 字,大约阅读时间需要 2 分钟。

synchronized: 

在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize,另外可读性非常好,不管用没用过5.0多线程包的程序员都能理解。 
ReentrantLock: 
ReentrantLock提供了多样化的同步,比如有时间限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在资源竞争不激烈的情形下,性能稍微比synchronized差点点。但是当同步非常激烈的时候,synchronized的性能一下子能下降好几十倍。而ReentrantLock确还能维持常态。 
Atomic: 
和上面的类似,不激烈情况下,性能比synchronized略逊,而激烈的时候,也能维持常态。激烈的时候,Atomic的性能会优于ReentrantLock一倍左右。但是其有一个缺点,就是只能同步一个值,一段代码中只能出现一个Atomic的变量,多于一个同步无效。因为他不能在多个Atomic之间同步。 
所以,我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock和Atomic如果用的不好,不仅不能提高性能,还可能带来灾难。 

转载于:https://www.cnblogs.com/Zombie-Xian/p/6259404.html

你可能感兴趣的文章
js之全选即点击全选标签可选择全部复选框
查看>>
自我介绍
查看>>
垂直外边距叠加问题
查看>>
Shell简介:什么是Shell,Shell命令的两种执行方式
查看>>
Linux .bashrc文件设置快速访问快捷键
查看>>
spring多个context:property-placeholder不生效问题
查看>>
入职培训笔记记录--day9(1、指针函数与函数指针、函数指针数组 2、malloc memset 3、递归函数 4、结构体 5、共用体---》大小端 6、枚举)...
查看>>
SQL查询
查看>>
四个程序员的一天
查看>>
排序三:插入排序
查看>>
JDBC也就那么回事
查看>>
类的加载顺序 (一、编译时常量与运行时常量)
查看>>
servlet:启动的时机
查看>>
笔记:2016-06-23
查看>>
5.22心得
查看>>
你赚的钱大部分来自你的圈子,而非你的知识
查看>>
字符串递归
查看>>
OS X Yosemite Beta体验
查看>>
spring boot ---web应用开发-错误处理
查看>>
和事件的概率求法
查看>>