详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp17

1、原子性操作:

不能被线程调度机制中断的操作;--对原子性变量的赋值和返回操作通常都是原子性的

原子性可以用于除了long和double之外的所有基本类型上的简单操作(当做不可分的原子),但是JVM将64位的  (long 和double变量)读取和写入当成是两个分离的32位      操作来执行。

2、同步机制与可视性:

同步机制强制在处理器系统中,一个任务做出的修改必须在应用中是可视的,如果没有同步机   制,那么修改时可视性将无法确定。

3、关于volatile:

     (1)当你定义long或者double的时候,如果使用volatile关键字,就会获得原子性(JDK 1.5之前不支持)

     (2)volatile关键字还确保了应用中的可视性。

     (3)当一个域的值依赖于他之前的值时(比如说自增)volatile就无法工作了。

     (4)如果一个域的值受到其他域的值得限制,那么volatile也就无法工作了--例如Range类的lower和upper边界就必须遵守lower<=upper。

4、volatile、synchronized和主存:

     (1)如果你将一个域声明为volatile,只要对这么域近些了写操作,那么所有的读操作都可以看到这个修改,即便使用了本地缓存,情况也确实如此,volatile域会立即写入到主存中,而读操作就发生在主存中。

     (2)在非volatile域上的原子操作不必刷新到主存中去,因此其他读取该域的任务也不必看到该新值。

     (3)同步也会导致向主存中刷新,因此一个域如果完全由synchronized方法或者语句块来保护,那就不必将其设置为volatile。

     (4)一个任务进行的任何写入操作对于这个任务本生都是可视的。

     (5)使用volatile而不是synchronized唯一安全的情况就是类中只有一个可变的域。--实现同步第一选择应该是synchronized。

java并发之原子性的更多相关文章

  1. Java并发之原子性,可见性,有序性

    原子性 ​原子性指的是一个或者多个操作在 CPU 执行的过程中不被中断的特性 在多线程情况下,线程会被操作系统调度进行任务切换,占有CPU时间片段的就执行,否则就阻塞 java中对基础类型的变量赋值是 ...

  2. Java 并发之原子性与可见性

    原子性 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作.再比如:a++: 这个操作实际是a = a + 1 ...

  3. java并发之原子性、可见性、有序性

    链接:https://blog.csdn.net/gongpulin/article/details/51211616

  4. Java自增原子性问题(测试Volatile、AtomicInteger)

    这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步 ...

  5. 深入理解Java并发之synchronized实现原理

    深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入 ...

  6. java并发之固定对象与实例

    java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...

  7. Java并发之BlockingQueue的使用

    Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B,  A线程每200ms就生成一个[0,100]之间的随机数, B线 ...

  8. Java高并发--原子性可见性有序性

    Java高并发--原子性可见性有序性 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 原子性:指一个操作不可中断,一个线程一旦开始,直到执行完成都不会被其他线程干扰.换 ...

  9. Java并发之Semaphore的使用

    Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类 ...

随机推荐

  1. 移动APP云测试平台测评分析

    随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多.有专家预测,2017年的App应用下载量将会突破2500亿,整个移动科技市场规模将会达到770亿美元.身处在这个"移动&quo ...

  2. 写移动端必备的meta标签

    <meta name="renderer" content="webkit" /> <meta http-equiv="X-UA-C ...

  3. HttpStatus各种状态

    JS.ns("JS.HTTPStatus","JS.XMLHttpRequest"); /** * FC 2616 HTTP1.1规范的HTTP Status状 ...

  4. hdu--1104--Remainder(简单的bfs)

    Remainder Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  5. get post请求

    GET 从指定的资源请求数据 /test/demo_form.asp?name1=value1&name2=value2 请求可被缓存 请求保留在浏览器历史记录中 请求可被收藏为书签 请求不应 ...

  6. [STM32F429-DISCO-HAL]2.先学会点亮LED和使用LCD。。。

      首先就简单的一秒闪烁一次LED灯,进而类比推理其他外设的配置过程.然后呢我们就用上LCD吧,毕竟这块板上占地面积最大的就是这个2.4'LCD了.   先贴出简洁的main函数.很干净,比较容易看懂 ...

  7. Python集合(set)类型的操作

    python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...

  8. SQL SERVER镜像切换

    --SQL SERVER镜像切换 ------------------------------2013/11/30 切换条件   高性能 没有见证服务器的高安全性模式 具有见证服务器的高安全性模式 自 ...

  9. 【转载】初识google test

    一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个 ...

  10. 用UE4来做Zego即构的房间列表

    Zego即构是一家做直播的服务商,Zego即构自己的房间列表,本文只是测试功能用,相应代码并没完全测试,请选择性参考. 我们在UE4中来实现一下,我感觉这个过程有点意思,UE4中C++与蓝图和UI的互 ...