1、直接操作内存,使用Unsafe 这个类

2、使用 getIntVolatile(var1, var2) 获取线程间共享的变量

3、采用CAS的尝试机制(核心所在),代码如下:

  public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4)); return var5;
}

可以看到这个do .... while {!this.compareAndSwapInt(var1, var2, var5, var5 + var4)} 。不断地使用CAS进行重试,直到执行成功为止。这里是一个乐观锁的操作。

4、使用Atomic ,是在硬件上、寄存器进行阻塞,而不是在线程、代码上阻塞。

5、这个是通俗说法ABA的问题

最新文章

  1. 消耗战 bzoj 2286
  2. java中对象产生初始化过程
  3. php复习
  4. eclipse自动补全
  5. hdu 4768 Flyer 二分
  6. Http Clinet使用
  7. Seafile的手册
  8. box-shadow 阴影
  9. 使用按钮触发element 时间事件 --时间戳
  10. vue开发中,build时css打包报错
  11. 【转】ubuntu 双机热备
  12. log4j2发送消息至Kafka
  13. TensorFlow函数:tf.random_shuffle
  14. Meteor入门介绍
  15. stack_01
  16. DDMS_Threads的简单使用
  17. TPM概述
  18. eclipse - 链接hadoop
  19. python用特殊方法定制类(不全)
  20. caffe2--Install

热门文章

  1. RESTful风格了解
  2. 【C# 线程】C++与C#数据类型对照表
  3. MySQL创建表、更改表和删除表
  4. Ng ML笔记
  5. Windows Server 2012 R2通过命令行重置网络环境
  6. 怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
  7. 使用Filter过滤器,解决中文乱码问题
  8. 资源管理模式:Evictor模式
  9. 面向对象编程(C++篇2)——构造
  10. JZ-029-最小的 K 个数