AtomicInteger解决线程同步的问题
2015-04-20 00:00
197 查看
摘要: AtomicInteger...
内容转载自csdn用户:zz198808
J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被synchronize以便两者的操作能够被当作是一个atomic的单元。
java多线程用法-使用AtomicInteger
下面通过简单的两个例子的对比来看一下 AtomicInteger 的强大的功能
class Counter {
private volatile int count = 0;
public synchronized void increment() {
count++; //若要线程安全执行执行count++,需要加锁
}
public int getCount() {
return count;
}
}
class Counter {
private AtomicInteger count = new AtomicInteger();
public void increment() {
count.incrementAndGet();
}
//使用AtomicInteger之后,不需要加锁,也可以实现线程安全。
public int getCount() {
return count.get();
}
}
从上面的例子中我们可以看出:使用AtomicInteger是非常的安全的
那么为什么不使用记数器自加呢,例如count++这样的,因为这种计数是线程不安全的,高并发访问时统计会有误,而AtomicInteger为什么能够达到多而不乱,处理高并发应付自如呢?
这是由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。Java.util.concurrent中实现的原子操作类包括:
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
内容转载自csdn用户:zz198808
J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被synchronize以便两者的操作能够被当作是一个atomic的单元。
java多线程用法-使用AtomicInteger
下面通过简单的两个例子的对比来看一下 AtomicInteger 的强大的功能
class Counter {
private volatile int count = 0;
public synchronized void increment() {
count++; //若要线程安全执行执行count++,需要加锁
}
public int getCount() {
return count;
}
}
class Counter {
private AtomicInteger count = new AtomicInteger();
public void increment() {
count.incrementAndGet();
}
//使用AtomicInteger之后,不需要加锁,也可以实现线程安全。
public int getCount() {
return count.get();
}
}
从上面的例子中我们可以看出:使用AtomicInteger是非常的安全的
那么为什么不使用记数器自加呢,例如count++这样的,因为这种计数是线程不安全的,高并发访问时统计会有误,而AtomicInteger为什么能够达到多而不乱,处理高并发应付自如呢?
这是由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。Java.util.concurrent中实现的原子操作类包括:
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
相关文章推荐
- (Kevin笔记三)用AtomicInteger来解决数据表异步操作的问题
- synchronized和AtomicInteger解决并发问题的性能比较
- synchronized和AtomicInteger解决并发问题的性能比较
- android中遇到java.lang.NumberFormatException: unable to parse 'null' as integer此类问题的原因及解决方法
- java i++ 并非原子操作的解决方法——用AtomicInteger
- java中的线程同步问题解决方案
- 线程同步问题 解决同步问题的方法 synchronized方法 同步代码块
- 今天遇到关于JAVA INTEGER类型的问题 不过还好 现在解决了,
- 解决出现Incorrect integer value: '' for column 'id' at row 1的问题
- C++——多线程编程(二)std::mutex 线程同步、解决资源竞争问题
- Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步
- synchronized、Lock、ReentrantLock、ReadWriteLock区别,threadlocal怎么解决线程同步问题
- 利用SynchronizationContext解决界面要素的线程同步问题
- 线程同步:解决线程不安全问题
- 问题解决:Xcode warning: Implicit conversion loses integer precision: 'long' to 'int'
- Windows线程(七)使用互斥量无法解决线程同步问题
- 线程同步2 ------ 用条件变量来解决生产者消费者问题
- R语言学习-问题解决-Error in output$nodeID : $ operator is invalid for atomic vectors
- Java自增原子性问题(测试Volatile、AtomicInteger)
- 黑马程序员-(多线程)了解线程与如何解决线程同步到来的安全问题!(面试)