C#转Java之路之二:多线程原子变量
2024-10-22 02:39:55
多线程操作会带来不一致性,为了实现一直性。我们可以用关键字:synchronized同步对象或者volatile轻量级、内存可见性。
两个关键字使用对比:
1、synchronized比较重,属于悲观锁机制,造成冲突大,线程间的上下文切换多,资源浪费。
比如我们就实现计数操作。
2、volatile轻量级内存可见性,非阻塞式,性能更高。
java已经实现了很多原子操作类:在java.util.concurrent包里
AtomicBoolean:原子Boolean类型
AtomicInteger:原子Integer类型
AtomicLong:原子Long类型
AtomicReference:原子引用类型
及相应的数组类型:
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
为了便于以原子方式更新对象中的字段,还有如下的类:
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater
AtomicReference还有两个类似的类,在某些情况下更为易用:
AtomicMarkableReference
AtomicStampedReference
实现原理就是用到volatile关键字声明变量。
最新文章
- html5学习笔记:canvas
- C++调用shell
- 编译原理实习(应用预测分析法LL(1)实现语法分析)
- Java使用占位符拼接字符串
- Java中正则表达式及其常用类Math、Calendar、Date、BigDecimal、BigInterger、System、Rondom的使用
- Hadoop 新 MapReduce 框架 Yarn 详解
- [Firmware Warn]: GHES: Failed to read error status block address for hardware error source
- PHP MYSQL数据字典
- ThinkPHP框架模型连贯操作(八)
- [Angular Tutorial] 4 - Directory and File Organization
- 隐藏马尔科夫模型HMM
- javascript的this关键字
- 使用docker查看jvm状态,在docker中使用jmap,jstat
- 函数和常用模块【day06】:datetime模块(二)
- Android 之类库常用包
- laravel5.4中{{$name}} 和 {{!! $name !!}} 的区别:后者原生输出。前者转义
- 【HLSDK系列】Delta 详解
- 工作流JBPM_day01:1-说明_MyProcessDesigner_流程设计器
- 973. K Closest Points to Origin
- 20179205《Linux内核原理与分析》第一周作业