Java 多并发之原子访问(Atomic Access)
在编程中,一个原子操作是只会出现一次的。一个原子操作在中间不会停止:要么全部发生要么一点也不发生。我们只有在原子操作完成之后才会看到原子操作的具体影响。
甚至是非常简单的表达式能够构造分解为简单操作的复杂操作。但是,你可以指定一些原子操作:
- 对于所有的引用变量和大部分的原始类型(除了long和double)变量来说读写是原子操作。
- 对于定义为了volatile 的所有变量来说读写是原子的。
原子操作不会交错执行所以没有必要担心线程冲突的问题。但是这样就说没有必要同步所有的原子操作,因为一致性错误仍然可能发生。使用volatile变量可以减少内存一致性错误,因为任何写入volatile 变量的值会被其他的读到的是相同值。这说明对volatile 变量的修改对其他线程都是可见的。而且这意味找当一个线程读取一个volatile变量的时候,这不仅仅说明可以读取针对volatile 变量的最新修改值还看到对代码的影响。
使用简单的原子变量比访问同步操作中的原来更加有效,但是这个需要程序员小心的去避免内存一致性问题。这个额外工作是否值得可是需要取决于应用的复杂性和规模了。
Java 多并发之原子访问(Atomic Access)的更多相关文章
- 学习Go语言之使用原子访问或互斥锁解决竞态问题
使用原子访问或互斥锁 // 解决竞态问题 package main import ( "fmt" "sync" "sync/atomic" ...
- Java高并发之锁优化
本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 public synchronized void syncMethod(){ othercode1(); ...
- VB如何连接访问数据库Access
VB如何连接访问数据库Access 听语音 | 浏览:10675 | 更新:2015-05-05 11:26 | 标签:连接 access 1 2 3 4 5 6 7 分步阅读 VB即Visual B ...
- tomcat访问(access)日志配置、记录Post请求参数
tomcat访问(access)日志配置.记录Post请求参数 一.配置与说明 tomcat访问日志格式配置,在config/server.xml里Host标签下加上 <Valve classN ...
- java文件来演示如何访问MySQL数据库
java文件来演示如何访问MySQL数据库. 注:在命令行或用一个SQL的前端软件创建Database. 先创建数据库: CREATE DATABASE SCUTCS; 接着,创建表: CREATE ...
- 通过Nginx,Tomcat访问日志(access log)记录请求耗时
一.Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remo ...
- Java语言中有4种访问修饰符
转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...
- 使用MIDAS访问远程Access数据库
使用MIDAS访问远程Access数据库 Allen Tao(http://blog.csdn.net/allentao/) 2005-5-3 本文源码下载 访问远程数据库常用的办法是 ...
- Java设计模式(21)访问模式(Visitor者模式)
Visitor定义:作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元 ...
随机推荐
- 颜色(color)转换为三刺激值(r/g/b)(干股)
//颜色转换 ##665522 - 三色值 + (UIColor *)setFontColorWithString:(NSString *)color { NSString *cString ...
- 蓝牙4.0BLE cc2540 cc2541 ios OAD课程(空中固件升级)[原版的,多图]
蓝牙4.0BLE cc2540 cc2541 ios OAD课程(件) 为阿莫单片机论坛 www.AmoMcu.com 原创.仅仅公布于csdn博客, 如需转载,请注明出处,谢谢! ...
- flipsnap.js 源码阅读备份
这是官网:http://hokaccha.github.io/js-flipsnap/ 1.引入全局命名空间 类似jQuery插件写法 传入window, document,提高内部访问速度: ; ...
- 初探boost之progress_display库学习笔记
progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...
- C++输出IP地址段内的合法地址
近半年的Intel实习生活快要结束了.马上要找工作了,这段时间打算把以前的知识复习复习,顺便在这里记录一下.这是当时去Intel面试的时候,面试官问的一道题.当时因为时间关系,只让我提供一个思路,并没 ...
- vs2010公布时去除msvcp100.dll和msvcr100.dll图讲解明
近期开发个程序,Copy到虚拟机环境中測试时提示缺少msvcr100.dll,于是想到编译时设置选项去除依赖. 什么是 msvcr100.dll MS = Microsoft V = Visual C ...
- 在Mac OS上配置Android开发环境
1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...
- wordpress常见的问题
nginx如webserver,wordpress上传主题错误 413 Request Entity Too Large 解决: vim /usr/local/nginx/conf/nginx.con ...
- oracle rac常用的命令
oracle rac常用的命令 节点层:olsnodes 网络层: oifcfg 集群层:crsctl,ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs ...
- 网络资源(6) - EJB视频
2014_08_24 http://v.youku.com/v_show/id_XMjE0NjE3MDA0.html?f=5227828 01_EJB3.0_下载安装与运行jboss -------- ...