首页 / JAVA / Java原子性操作类应用
Java原子性操作类应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java原子性操作类应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2572字,纯文字阅读大概需要4分钟。
内容图文
Java5的线程并发库中,提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作
java.util.concurrent在并发编程中很常用的实用工具类。
|----locks为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器
|----atomic类的小工具包,支持在单个变量上解除锁的线程安全编程。可以对基本类型、数组中的基本类型、类中的基本类型等进行操作
|----AtomicInteger 用于提供整型数字原子性操作
|----AtomicIntegerArray 用于提供整型数组原子性操作
|----AtomicIntegerFieldUpdater 用于提供类对象中的整型数据原子性操作
...... 对应有Double...相类似的原子性操作类
以上原子性操作类具体如何使用详情可以查看相应的官方jdk文档,下面通过简单的两个例子的对比来看一下 AtomicInteger 的强大的功能,分别是普通的方法与使用AtomicInteger类的方法:
普通方法实现方案:
1 public class CommonTest { 2 private volatile int count = 0; //volatile关键字实现线程间数据共享 3 4publicsynchronizedvoid increment() { 5 count++; //若要线程安全执行,需要加锁 6 } 7 8publicint getCount() { 9return count; 10 } 11 }
使用AtomicInteger类的方法实现
1 public class AtomicIntegerTest { 2 private AtomicInteger count = new AtomicInteger(); 3 4publicsynchronizedvoid increment() { 5 count.incrementAndGet(); 6 } 7 8publicint getCount() { 9return count.get(); 10 } 11 }
调用两个类的主方法实现
1 public class MainClass { 2 public static void main(String[] args) { 3 // final CommonTest atomicIntegerTest = new CommonTest(); 4 final AtomicIntegerTest atomicIntegerTest = new AtomicIntegerTestTrue(); 5for (int j = 0; j < 3; j++) { //各自同时开启3个线程 6//增加线程 7new Thread(new Runnable() { 8 @Override 9publicvoid run() { 10for (int i = 0; i < 10; i++) { 11 atomicIntegerTest.increment(); 12try { 13 Thread.sleep(1000); 14 } catch (InterruptedException e) { 15 e.printStackTrace(); 16 } 17 } 18 } 19 }).start(); 20//读取线程21new Thread(new Runnable() { 22 @Override 23publicvoid run() { 24for (int i = 0; i < 10; i++) { 25 System.out.println(Thread.currentThread().getName() + "-->" + atomicIntegerTest.getCount()); 26try { 27 Thread.sleep(1000); 28 } catch (InterruptedException e) { 29 e.printStackTrace(); 30 } 31 } 32 } 33 }).start(); 34 } 35 } 36 }
运行结果如下所示:
Thread-1-->1 Thread-3-->2 Thread-5-->3 Thread-3-->4 Thread-1-->5 Thread-5-->5 Thread-1-->9 Thread-5-->9 Thread-3-->9 Thread-5-->12 Thread-3-->12 Thread-1-->12 Thread-3-->13 Thread-1-->13 Thread-5-->14 Thread-5-->16 Thread-1-->16 Thread-3-->16 Thread-1-->21 Thread-3-->21 Thread-5-->21 Thread-5-->22 Thread-1-->22 Thread-3-->22 Thread-1-->25 Thread-5-->25 Thread-3-->25 Thread-3-->29 Thread-1-->30 Thread-5-->29
从上面的例子中我们可以看出:使用AtomicInteger是非常的安全的
那么为什么不使用记数器自加呢,例如count++这样的,因为这种计数是线程不安全的,高并发访问时统计会有误,而AtomicInteger为什么能够达到多而不乱,处理高并发应付自如呢?
这是由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。
原文:http://www.cnblogs.com/liang1101/p/6517486.html
内容总结
以上是互联网集市为您收集整理的Java原子性操作类应用全部内容,希望文章能够帮你解决Java原子性操作类应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。