Atomic或Synchronized实现多线程计数器
2012-06-18 10:18
363 查看
多线程会带来主要两方面问题,一是顺序性,二是可见性。顺序性问题是指多个线程对资源访问的有序性;可见性是指某线程完成对资源的修改后,其他线程是否立即可知。这周写了个多线程计数器,最开始天真的认为不用加锁,认为A线程和B线程谁先加1无所谓,不存在资源访问顺序的问题,但内存可见性的问题如果不采取措施就会出问题。后来想到两个解决方案,一是synchronized, 二是Atomic。synchronized开销大,volatile应用场景不对,推荐用开销更小的Atomic。
如若转载,请说明出处!http://blog.csdn.net/xukunddp
public class TableStatistics { private String programName; // store last call program name private int getCounter; private int getNextCounter; private int addrCounter; private int findCounter; public synchronized int incrementGet() { return ++getCounter; } public synchronized int incrementGetNext() { return ++getNextCounter; } public synchronized int incrementAddr() { return ++addrCounter; } public synchronized int incrementFind() { return ++findCounter; } }
public class TableStatistics { private String programName; // store last call program name private AtomicInteger getCounter = new AtomicInteger(); private AtomicInteger getNextCounter = new AtomicInteger(); private AtomicInteger addrCounter = new AtomicInteger(); private AtomicInteger findCounter = new AtomicInteger(); public int incrementGet() { return getCounter.incrementAndGet(); } public int incrementGetNext() { return getNextCounter.incrementAndGet(); } public int incrementAddr() { return addrCounter.incrementAndGet(); } public int incrementFind() { return findCounter.incrementAndGet(); } }
如若转载,请说明出处!http://blog.csdn.net/xukunddp
相关文章推荐
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 多线程基础学习七:使用synchronized实现多线程情况下的访问次数统计
- 多线程实现,synchronized用法
- Java多线程之~~~synchronized添加参数来实现独立的代码片段
- Java多线程中Synchronized的实现原理与优化
- 利用 C++ 11 特性实现多线程计数器
- JAVA多线程(五)用lock、synchronized、阻塞队列三种方法实现生产者消费者模式
- synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解
- synchronized在JVM底层的实现原理及Java多线程锁理解
- JAVA学习笔记--多线程(三)synchronized实现线程同步
- 多线程:保持原子性的变量AtomicInteger(效率高于synchronized)
- 多线程-synchronized实现原理分析
- Java多线程笔记二(synchronized的使用以及实现原理)
- Java的多线程编程模型5--从AtomicInteger开始(自增长实现)
- 分别使用原子变量、synchronized关键字、ReentrantLock实现计数器
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解 (r)
- 并发编程学习笔记二 ------synchronized关键字实现同步访问解决多线程安全问题
- 2.使用synchronized关键字实现多线程的同步和互斥(不同线程同时读写同一数据)
- Java实现多线程环境下的计数器功能
- synchronized与static synchronized 的区别、synchronized在JVM底层的实现原理及Java多线程锁理解