多线程操作会带来不一致性,为了实现一直性。我们可以用关键字: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关键字声明变量。

最新文章

  1. html5学习笔记:canvas
  2. C++调用shell
  3. 编译原理实习(应用预测分析法LL(1)实现语法分析)
  4. Java使用占位符拼接字符串
  5. Java中正则表达式及其常用类Math、Calendar、Date、BigDecimal、BigInterger、System、Rondom的使用
  6. Hadoop 新 MapReduce 框架 Yarn 详解
  7. [Firmware Warn]: GHES: Failed to read error status block address for hardware error source
  8. PHP MYSQL数据字典
  9. ThinkPHP框架模型连贯操作(八)
  10. [Angular Tutorial] 4 - Directory and File Organization
  11. 隐藏马尔科夫模型HMM
  12. javascript的this关键字
  13. 使用docker查看jvm状态,在docker中使用jmap,jstat
  14. 函数和常用模块【day06】:datetime模块(二)
  15. Android 之类库常用包
  16. laravel5.4中{{$name}} 和 {{!! $name !!}} 的区别:后者原生输出。前者转义
  17. 【HLSDK系列】Delta 详解
  18. 工作流JBPM_day01:1-说明_MyProcessDesigner_流程设计器
  19. 973. K Closest Points to Origin
  20. 20179205《Linux内核原理与分析》第一周作业

热门文章

  1. 文件对象FSO应用 文件对象FSO应用
  2. archlinux升级firefox的flash插件
  3. C++ GUI Qt4编程(05)-2.2GoToCell
  4. Oracle 查看表结构视图
  5. C++ 调用Python3
  6. DP Intro - OBST
  7. C#下查找并杀死子进程(进程树)
  8. centOS使用.htaccess
  9. nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】
  10. 【Xshell】设置XShell最大的显示行数