1.啥是java的原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行. 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元. 试想一下,如果这2个操作不具备原子性,会造成什么样的后果.假如从账户A减去1000元之后,操作突然中止.然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作.这样就会导致账户A虽然减去了1000元,但是…
1. 让我们首先了解下java 中 Volatile 关键字 Volatile可实现java内存模型当中的可见性, java内存模型的可见性: 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的.也就是一个线程修改的结果,另一个线程马上就能看到. 比如:用volatile修饰的变量,就会具有可见性.volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存.所以对其他线程是可见的. BUT Volatile 不保证原子性: just like this: volati…
深入分析Volatile的实现原理 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性".可见性的意思是当一个线程改动一个共享变量时,另外一个线程能读到这个改动的值. 它在某些情况下比synchronized的开销更小.本文将深入分析在硬件层面上Inter处理器是怎样实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量. 术语定义 术…
volatile关键字 volatile是一个特殊的修饰符,只有成员变量才能使用它,与Synchronized及ReentrantLock等提供的互斥相比,Synchronized保证了Synchronized同步块中变量的可见性,而volatile则是保证了所修饰变量的可见性.可见性指的是在一个线程中修改变量的值以后,在其他线程中能够看到这个值(在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的(不可见)).因为volatile只是保证了同一个变量在多线程中的可见性…
1.概要 本文是无锁同步系列文章的第二篇,主要探讨JAVA中的原子操作,以及如何进行无锁同步. 关于JAVA中的原子操作,我们很容易想到的是Volatile变量.java.util.concurrent.atomic包和JVM提供的CAS操作. 2.Volatile 1)Volatile变量不具有原子性 Volatile变量具有一种可见性,该特性能保证不同线程甚至处理器核心在对这种类型的变量在读取的时候能读到最新的值.但Volatile变量不提供原子操作的保证. 下面我们给出一个例子: publ…
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发生了什么,所以做了一番实验,验证socket tcp连接在调用close.被GC回收.程序运行完毕退出.程序进程被杀掉时,tcp会产生什么行为.得出了一些结论,记录于此同时分享给大家. 先写出得到的结论: java程序运行完毕退出和被杀进程时,socket tcp连接会被关闭.而且是通过发送RST方…
学习java需要有一套完整的学习线路,需要有条理性,当下学习java已经有一段时间了,由当初的懵逼状态逐渐好转,也逐渐养成了写技术学习笔记的习惯,今天总结了一下java中的原子操作. 1.Java中的原子操作是什么? 所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间切换到另一个线程. 2.Java中的原子操作介绍: jdk1.5的包为java.util.concurrent.atomic 这个包里面提供了一组原子类.其基本特性就是在多线程环境下,当有多个线程…
来自<java并发编程的艺术>.只是方便自己以后查找. 处理器如何实现原子操作 32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作.首先处理器会自动保证基本的内存操作的原子性.处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址.Pentium 6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线…
A method and apparatus for a atomic operation is described. A method comprises receiving a first program unit in a parallel computing environment, the first program unit including a memory update operation to be performed atomically, the memory updat…
原子操作:不能被分割(中断)的一个或一系列操作叫原子操作. 原子操作Atomic主要有12个类,4种类型的原子更新方式,原子更新基本类型,原子更新数组,原子更新字段,原子更新引用.Atomic包中的类基本都是使用Unsafe实现的包装类. 基本类型:AtomicInteger,AtomicLong,AtomicBoolean; 引用类型:AtomicReference.AtomicReference的ABA实例.AtomicStampedRerence.AtomicMarkableReferen…