- 浏览: 98979 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (48)
- ruby (7)
- scala (1)
- java (11)
- jython (1)
- python (1)
- life (0)
- jruby (1)
- javascript (1)
- 翻译 (0)
- lua (2)
- SUSE (1)
- scheme (6)
- amb (1)
- 编译器 (0)
- javaee (1)
- 分布式 (0)
- 并发 (1)
- 杂感 (1)
- IO (0)
- POJO (0)
- EJB (0)
- concurrent (0)
- 算法 (1)
- ibm (0)
- JNI (0)
- AOP (0)
- asm (0)
- Groovy (1)
- agent (0)
- instrument (0)
- manifest (1)
- classloader (0)
- jboss (0)
- code (0)
- OSGI (0)
- 庄子 (0)
- JTA (0)
- SA (1)
- clojure (0)
- collections (0)
- hotswap (0)
- 序列化 (0)
- CORS (0)
- 停机 (0)
- JVM (0)
- parallel (0)
- NIO (0)
- weblogic (0)
- transaction (1)
- 反思 (1)
- 事务 (1)
- 海量数据 (0)
- JDO (0)
- JPA (0)
- storm (0)
- log4j (0)
- java2d (0)
- btrace (0)
- hadoop (1)
- cygwin (1)
- sshd (1)
- wanlu (0)
- mysql (0)
- debug (0)
- autotest (0)
- Error (0)
- 数据结构 (0)
- descriptor (0)
- jdb (0)
- hsdb (0)
- wiki (0)
- maven (0)
- spring (0)
- eclipse (0)
- mvc (0)
- 代理 (0)
- oracle (0)
- hibernate (1)
- Hash (0)
- blockingqueue (0)
- remember (0)
- graphviz (0)
- http (0)
- post (0)
- jdbc (0)
- websocket (0)
- inter (0)
- got error: The Network Adapter could not establish the connection when creating a data source in Weblogic pointing to a Oracle database (1)
- bug (0)
- xml (0)
- mail (0)
- db (0)
- JAXB (0)
- StAX (0)
- google (0)
- haskell (1)
- rpc (0)
- read-code (0)
- spring-cloud (0)
- service-registry-discovery (0)
最新评论
-
IamSungod:
很有探索精神,学过多种编程语言呀
clojure parse xml -
messi_18:
是的。不知道别的平台是否也有类似问题。
scalatest 尝试(一) -
llh110220:
lz在windows下编写的吧
scalatest 尝试(一)
volatile reference和atomic reference的作用有何不同?
通过查阅AtomicReference的代码发现,它内部是基于volatile的field来存储reference。所以,它具备volatile的功能。如果,只是想解决“可见性”,直接用AtomicReference的get和set方法就相当于volatile的作用。但是,volatile无法保证多个线程写入不相互覆盖的问题。
怎么解决呢?加锁。这个谁都知道。不加锁呢?就可以用AtomicReference提供的CAS方法compareAndSet(expected,actual)。如果volatile域的值等于expected那么就用actual去更新然后返回true,否则返回false。
所以,常见的变成模式是用一个循环(比如volatile域是数组):
通过查阅AtomicReference的代码发现,它内部是基于volatile的field来存储reference。所以,它具备volatile的功能。如果,只是想解决“可见性”,直接用AtomicReference的get和set方法就相当于volatile的作用。但是,volatile无法保证多个线程写入不相互覆盖的问题。
怎么解决呢?加锁。这个谁都知道。不加锁呢?就可以用AtomicReference提供的CAS方法compareAndSet(expected,actual)。如果volatile域的值等于expected那么就用actual去更新然后返回true,否则返回false。
所以,常见的变成模式是用一个循环(比如volatile域是数组):
private AtomicReference<int[]>items=new AtomicReference(); public void add(int item){ int[] copy = items.get(); // get copy while(true) { int[] updated=Arrays.copyOf(copy,copy.length+1); updated[updated.length-1]=item; if(items.compareAndSet(copy,updated)){ return; } } }
发表评论
-
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
2013-06-27 16:27 0Today when I try to send mail b ... -
java exchanger
2013-06-19 15:54 0Today focus on: multi-thread in ... -
java blocking queue performance issue when large concurrency
2013-05-16 15:35 0I recalled someone ask me a que ... -
发现了几篇关于java虚拟机的好文章,要好好消化一下
2013-04-19 15:49 0好久没有关注jvm了,今天翻到了几篇好文章。先记下,有时间消化 ... -
Java Endorsed Standards Override Mechanism
2013-04-18 17:56 0Today I read an article named & ... -
java.lang.LinkageError
2012-12-11 14:13 0今天遇到了一个问题java.lang.IllegalAcces ... -
管理log插入。比如编译时插入。
2012-11-20 20:51 0管理log插入。比如编译时插入。 萌发这个想法是因为每次,调试 ... -
java解惑44题没重现
2012-11-09 02:18 0java解惑第44题我没有重现。 jdk1.6.0_35 ... -
java2d学习
2012-11-07 00:37 0想要系统的学习一下java2d 第一步学习画阿基米德螺旋曲线。 ... -
ASM初探
2012-11-02 00:38 0今天遇到了一个问题。Log4J的config and watc ... -
String.split
2012-10-31 21:02 844String.split(String reg)这个方法一点不 ... -
mina,hbase,zookeeper
2012-10-26 22:49 0我要学习探索新知识的有效手段。从这两个开始吧。 -
log4j那些事儿
2012-10-25 19:31 0都知道Log4j是用来输出日志的框架。不怕笑话,我一直都知道它 ... -
storm是什么
2012-09-28 16:49 0storm是什么?需要研究一下。 https://github ... -
你知道吗,-Long.MIN_VALUE == Long.MIN_VALUE
2012-09-20 22:58 3284相信吗,-Long.MIN_VALUE == Long.MIN ... -
transaction in JAVAEE and Spring
2012-09-14 19:16 0XA transaction and local transa ... -
weblogic 数据源的事务管理
2012-09-14 01:50 0有这样一个case,在weblogic下配置了两个数据源,其中 ... -
java NIO
2012-09-13 16:52 0由这篇文章想到了NIO。 然后又提到了这篇文章。 -
java 并发与并行(Java concurrent and parallel)
2012-09-13 16:19 0起因是想知道BlockedQueque是干嘛的,接着想到了这篇 ... -
java 序列化框架
2012-09-12 19:04 0读了这篇文章解开 phprpc 序列化性能高于 hessian ...
相关推荐
在iOS和Mac开发中,Objective-C是主要的编程语言,它在定义实例变量或属性时提供了几个关键的修饰符,包括`volatile`、`nonatomic`和`atomic`。这些关键字对于理解多线程环境下的数据同步和内存管理至关重要。本文将...
《Java并发编程:synchronized、ReentrantLock、volatile与Atomic深度解析》 在Java多线程编程中,正确地管理共享资源是至关重要的。本文将深入探讨四种关键的并发控制机制:synchronized关键字、ReentrantLock(可...
在 atomic_ops 中,volatile 是一个非常重要的关键字。它用于确保变量的读写操作是原子的。但是,使用 volatile 可能会带来性能损失,因此应该尽量避免使用。 atomic_ops 的实现 atomic_ops 的实现需要遵循一定的...
历史上,`atomic_t`中的`counter`字段被声明为`volatile`。然而,这种做法现在不被鼓励。文档提到,有关`volatile`关键字的完整讨论可以在`Documentation/volatile-considered-harmful.txt`找到。这里强调了`...
a new powerful regular expression library, and a portable multithreading library featuring threads, mutexes, condition variables, and atomic variables. Needless to say, it is hard to know and ...
在编写多线程程序时,如果需要更高级别的同步保障,还需要使用锁、原子变量(如C++11中的`std::atomic`)或其他并发原语。 此外,`volatile`关键字的使用需要谨慎,过度使用可能会导致性能下降,因为它阻止了编译器...
在描述中提到的“reference”部分,通常包含了C++语言的标准库函数、类、模板和预定义实体的详细信息。这些参考文档对于开发者来说是不可或缺的工具,可以帮助他们理解和使用C++的各种功能。 C++的`reference`部分...
**原子批处理库atomic-batcher** 在前端开发中,我们经常需要执行一系列操作,例如更新DOM、发送网络请求或处理大量数据。这些操作如果逐一执行,可能会导致性能问题,特别是当操作数量大时。为了解决这个问题,...
《ATOMIC:机器常识推理的综合图谱》 在当今的自然语言处理(NLP)领域,理解人类的常识推理是关键挑战之一。"atomic_data.tgz" 是一个专门针对这一问题的数据集,名为 ATOMIC(An Atlas of Machine Commonsense ...
《深入理解Boost库:探索原子操作atomic》 在软件开发中,尤其是在多线程和并发编程领域,确保数据的一致性和完整性是至关重要的。Boost库,作为C++的一个强大工具集,提供了各种实用的组件来解决这些问题。其中,`...
在IT行业中,"atomic"这个概念可能涉及到多个领域,但在这里与"字体"标签结合,我们可以推断讨论的是Atomic Design理论在网页设计或用户界面(UI)设计中的应用,特别是与字体相关的原子组件。Atomic Design是一种...
如果需要原子性操作,可以使用`synchronized`或`java.util.concurrent.atomic`包中的原子类。 4. **应用场景**:volatile适合用于那些读操作频繁,写操作不依赖当前值,并且不需要复合操作的场景。例如,作为共享...
在IT领域,"Atomic"可能指的是多个概念,但在这个场景中,由于标签是"字体",我们可以推测这里的"Atomic"是指一种特定的字体或者排版风格。字体在计算机科学和设计行业中扮演着至关重要的角色,它影响着用户对数字...
"Atomic Alarm Clock"是一款功能丰富的时钟工具,它集成了闹钟、日历等多种实用功能,为用户提供了一站式的计时解决方案。这款软件在日常生活中非常实用,不仅可以准确地显示时间,还可以设置个性化的闹钟提醒,确保...
首先,文档的标题“C++ Standard Library Reference.pdf”表明了这份文件是一个参考手册,为C++程序员提供了标准库的详细指南。标准库是C++编程语言的一个核心组成部分,它包含了一系列经过严格测试和标准化的类、...
Win8~10系统右下角日期与时钟同时显示但精美,可取代系统本身的,非常醒目。
a new powerful regular expression library, and a portable multithreading library featuring threads, mutexes, condition variables, and atomic variables. Needless to say, it is hard to know and ...
但需要注意的是,`volatile`关键字并不能保证复合操作(如i++)的原子性,对于这类需求,应考虑使用`synchronized`或者`java.util.concurrent.atomic`包中的原子类。 总结来说,`volatile`关键字是Java并发编程中的...