`

AtomicInteger 在高并发量应用程序中的使用及volatile说明

    博客分类:
  • java
阅读更多

当我们在处理简单程序中,可以使用诸如count++这种简单的计数器,但是这种简单的处理在高并发/多线程中的使用却是不安全的,几乎可以百分百的说,得到的数据是未更新的,不是实时数据,然而在JDK1.5之后,却封装了一个类AtomicInteger 可以用来统计这种计数。

       该类中有三个变量,其中最重要的是

       private volatile int value;

       value就类似count,还有2个辅助变量用于进行更新value。其中的volatile使用可见最后说明。

        // setup to use Unsafe.compareAndSwapInt for updates

      private static final Unsafe unsafe = Unsafe.getUnsafe();

       private static final long valueOffset;

       在该类中常用方法主要是实现加1减1操作,方法分别是:

       public final int getAndIncrement();

       public final int getAndDecrement();

       

      volatile说明:

      volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。

 

      java语言规范指出:为了获取最佳的运行速度,允许线程保留共享变量的副本,当这个线程进入或者离开同步代码块时,才与共享成员变量进行比对,如果有变化再更新共享成员变量。这样当多个线程同时访问一个共享变量时,可能会存在值不同步的现象。而volatile这个值的作用就是告诉VM:对于这个成员变量不能保存它的副本,要直接与共享成员变量交互。

 

     建议:当多个线程同时访问一个共享变量时,可以使用volatile,而当访问的变量已在synchronized代码块中时,不必使用。

     缺点:使用volatile将使得VM优化失去作用,导致效率较低,所以要在必要的时候使用。

 

     除了volatile外,对于线程安全加锁的,我们接触更多的是synchronized。这里就不在做更多的说明。

分享到:
评论

相关推荐

    java高并发程序设计(原版电子书)

    这本书旨在帮助读者理解并掌握在高并发环境下编写高效、稳定且可扩展的Java应用程序的关键技巧和最佳实践。以下是该书可能涵盖的一些核心知识点: 1. **并发基础**:首先,书中会介绍并发编程的基本概念,如线程、...

    Java高并发程序设计模式资料

    在Java编程领域,高并发程序设计模式是解决系统性能瓶颈、提升系统响应速度和处理能力的关键技术。这一主题涵盖了多线程、并发控制、同步机制、分布式架构等多个方面。以下是对这一主题的详细阐述: 1. **并发基础*...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │ 高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │ 高...

    多线程并发编程在Netty中的应用分析

    本文详细介绍了多线程并发编程在Netty中的应用情况,从Java内存模型的基础理论出发,深入探讨了Netty框架中如何有效利用多线程提高网络应用程序的性能。通过对共享数据的正确同步、锁的合理使用、volatile关键字的...

    高清Java高并发程序设计

    在IT领域,尤其是在Java开发中,高并发程序设计是一项至关重要的技能。这门技术涉及到如何在多线程环境下高效地处理大量并发请求,确保系统的稳定性和性能。"高清Java高并发程序设计"这一主题涵盖了以下几个核心知识...

    Java并发编程(18)第五篇中volatile意外问题的

    总之,"Java并发编程(18)第五篇中volatile意外问题的正确分析解答"这篇文档深入浅出地解释了volatile的关键特性,揭示了其在并发编程中的局限性,并给出了实际问题的解决方案,对于提升Java并发编程能力具有很高的...

    java 高并发解决 思路

    在Java编程领域,高并发处理是一项至关重要的技术,特别是在构建大型、高性能的互联网应用时。本文将基于"java 高并发解决思路"这一主题,深入探讨相关知识点,并结合"高并发web架构.pdf"文档中的实例进行阐述。 1....

    高并发常见面试题(深入底层).docx

    以上内容覆盖了高并发场景下常见的技术点,包括`volatile`关键字、Java内存模型、原子性保证机制、集合类线程安全问题以及读写锁与阻塞队列的应用,这些都是面试中经常被提问的重点领域。理解这些概念不仅有助于提升...

    实战java高并发编程

    在Java编程中,高并发处理是性能优化和系统稳定性的重要组成部分,尤其在大数据处理、分布式系统以及云计算等场景下,其重要性不言而喻。 本书首先会深入讲解Java并发的基础概念,包括线程的创建与管理,线程同步...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │ 高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │ 高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │ 高...

    JAVA并发程序设计实践

    《JAVA并发程序设计实践》是一本深度探讨Java平台上的多线程编程的书籍,它针对的是那些希望在实际项目中高效、安全地实现并发处理的开发者。这本书详细讲解了Java并发编程的基础理论以及实战技巧,旨在帮助读者理解...

    Java高并发设计.zip

    以上知识点是Java高并发设计的基础,熟练掌握并应用这些概念和技术,将有助于开发出高效、稳定、可扩展的并发应用程序。《实战Java高并发程序设计》这本书可能会深入探讨这些话题,并提供具体的实践指导,对于提升...

    Java高并发程序设计_java_

    以上内容是Java高并发程序设计的核心知识点,理解和掌握这些概念,能够帮助开发者构建出更加稳定、高效的多线程应用程序。阅读《Java高并发程序设计》这本书会进一步深入探讨这些话题,提升对并发编程的理解和实践...

    Java高并发实践

    在IT行业中,Java作为一种强大的编程语言,被广泛应用于构建高性能、高并发的系统。"Java高并发实践"这个主题深入探讨了如何利用Java语言特性来处理大规模并发问题,旨在提高系统的响应速度和吞吐量。以下是一些关于...

    汪文君Java高并发实战编程

    本书主要针对Java程序员,旨在帮助他们理解和掌握在高并发环境下如何设计和优化应用程序。以下是该书可能涵盖的一些关键知识点: 1. **Java并发基础**:介绍Java并发编程的基础概念,包括线程的创建与启动,线程的...

    JUC代码收集,java高并发多线程学习

    本资源"JUC代码收集,java高并发多线程学习"显然是一个专注于探讨和学习JUC库的资料包。 JUC库包含多个子包,如`concurrent`, `atomic`, `locks`等,每个子包都有其特定的功能和用途: 1. **concurrent**:这是JUC...

    Java高并发经典文档-MOBI-可在电子书里查看

    Java高并发编程是Java开发中的一个关键领域,尤其在大型分布式系统、互联网应用以及服务器端开发中至关重要。本文将深入探讨“实战Java高并发程序设计”文档中的核心知识点,帮助你掌握处理高并发场景的关键技术和...

    JUC包含线程,线程池,CAS,volatile等底层原理,以及相关问题的解决方式以及相关工具类的使用

    Java并发编程领域中,JUC(Java ...总之,理解和掌握JUC中的这些概念和技术对于编写高性能、高并发的Java应用程序至关重要。在实际开发中,应根据具体场景选择合适的数据结构和同步机制,以确保程序的正确性和性能。

    计算机后端-Java-Java高并发从入门到面试教程-据库切库分.zip

    2. **并发控制**:学习Java并发控制机制,如`synchronized`关键字、锁(可重入锁、读写锁、信号量)、volatile变量以及原子类(AtomicInteger, AtomicBoolean等)的使用。 3. **并发容器**:了解并发容器如`...

    JUC多线程及高并发1

    本文将深入探讨JUC中的多线程及高并发相关知识点。 一、volatile的理解 volatile是Java虚拟机提供的一种轻量级同步机制,它确保了在多线程环境下,对共享变量的修改能够被其他线程即时看到。volatile主要提供两方面...

Global site tag (gtag.js) - Google Analytics