AtomicInteger能够保证对一个整型的操作是原子性。像i++这个操作不是原子操作,存在竞态条件,所以需要加锁,但是加锁的性能不高,如果仅仅为了对一个整数加1。我们来看下他的实现。
private volatile int value;
AtomicInteger本身持有一个整型变量,所有的操作都是基于这个变量的。变量由violate修饰,这个变量是保证可见性的,具体可见另一...
分类:
编程语言 时间:
2015-03-27 22:24:40
阅读次数:
176
HTML5 Page Visibility API是一个非常有用的特性,当页面对用户不可见时,暂停播放页面中的视频、动画、声音、以及其他耗费内存的操作,等用户回来时,再继续这些操作。当然,最好提醒下用户可以继续回到本页面上来,本文研究利用改变页面tab(title)实现提醒。...
分类:
其他好文 时间:
2015-03-21 07:31:41
阅读次数:
176
1. C中static有什么作用 (1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。 (2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开.....
分类:
编程语言 时间:
2015-03-20 12:46:27
阅读次数:
196
Java语言的变量类型主要有三种:成员变量、静态变量(全局变量)、局部变量作用域是由{}的位置所决定的,它决定了其定义的变量名的可见性与生命周期成员变量成员变量的作用范围与实例化对象的作用范围相同,当类被实例化以后,成员变量就会在内存中分配空间并进行初始化,当实..
分类:
编程语言 时间:
2015-03-20 09:26:09
阅读次数:
131
从字面上看,static的意思是静态的。由static'修饰的变量或函数,改变了其存储方式和可见性,static关键字的作用主要有拓展生命周期、限制作用域和保持数据唯一性。 1、拓展生命周期 拓展生命周期是针对c语言中局部变量,因为static关键字改变了局部变量的存储方式。c/c++中...
分类:
其他好文 时间:
2015-03-18 23:04:10
阅读次数:
161
在并发方法中,我们要保证一致性和准确性,但是有希望在给定的硬件条件下达到最佳性能.当我们完全使用了不可变共享变量模型,那么我们将很容易地规避竞争条件或者一致性的问题.因为当线程不再竞争访问可变数据的时候,程序就无需考虑变量在多个线程之间的可见性问题和穿越内存栅栏的问题,同时,我们也不许担心如何控制线...
分类:
其他好文 时间:
2015-03-16 06:10:32
阅读次数:
150
1.为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性。 但是为了提供灵活性,苹果也让开发者显示设置范围(四选一)。2.四种编译指令如下:@private 实例变量只能被声明它的类访问。@protected实例变量能被声明它的类和子类,所有没有显示指定范围的实例变量都是@pr...
分类:
移动开发 时间:
2015-03-15 18:17:21
阅读次数:
111
volatile提供了弱同步机制,用来确保将变量更新通知到其它线程。volatile变量不会被缓存在寄存器中或者对其它处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值。可以想象成如下语义,然而volatile是更轻量级的同步机制。volatile只能确保可见性,但不能保证原子...
分类:
编程语言 时间:
2015-03-14 23:05:31
阅读次数:
268
volatile提供了弱同步机制,用来确保将变量更新通知到其它线程。volatile变量不会被缓存在寄存器中或者对其它处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值。可以想象成如下语义,然而volatile是更轻量级的同步机制。volatile只能确保可见性,但不能保证原子性。也就是说不能在复合操作用volatile变量,比如i++。
public sync...
分类:
编程语言 时间:
2015-03-14 18:40:38
阅读次数:
148
java中volatile关键字的使用涉及到java的内存模型,JMM。简单来说,每个线程都有一个本地内存(虚拟的),线程共享的变量存储在主内存中,主内存在堆中。内存访问方式如下图所示。volatile的作用总结如下:(1)可见性:对一个volatile变量的读取,总是能够看到(任意线程)对这个变量...
分类:
编程语言 时间:
2015-03-14 18:28:47
阅读次数:
311