`

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高并发程序设计,高并发面试题目

    Java高并发编程是Java开发中的重要领域,尤其在大规模分布式系统和互联网应用中,对高并发处理能力的要求日益提升。本资源包含了一套完整的Java高并发视频教学,以及相关的实战项目和面试题目,旨在帮助开发者深入...

    实战Java高并发程序设计第二版随书代码

    这本书涵盖了Java并发编程的核心概念和技术,旨在帮助开发者在实际项目中高效地处理高并发场景。随书附带的代码提供了丰富的示例,以便读者能够更直观地理解并实践这些理论知识。 1. **Java并发基础** - **线程与...

    实战Java高并发程序设计课件

    本课程“实战Java高并发程序设计”旨在深入探讨如何有效地处理和优化Java应用程序中的多线程和并发问题。 首先,我们要理解Java高并发的核心概念。并发是指多个执行单元(如线程或进程)在一段时间内同时执行,而...

    实战Java高并发程序设计-12333.pdf

    这本"实战Java高并发程序设计-12333.pdf"显然聚焦于如何有效地构建能够处理大量并发请求的应用程序。高并发通常与大型网站、分布式系统以及云计算环境相关联,它涉及到系统性能优化、资源管理、数据一致性、系统稳定...

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

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

    《实战java高并发程序设计》源码整理

    通过对《实战Java高并发程序设计》的源码学习,你可以深入理解上述知识点,并将它们应用到实际项目中,提高系统性能和可扩展性。书中每个示例代码都是对这些概念的具体实践,通过阅读和分析,你将能够更好地掌握Java...

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

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

    高清Java高并发程序设计

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

    实战java高并发程序设计源码下载

    在Java编程领域,高并发程序设计是至关重要的一个部分,特别是在大型互联网应用或者分布式系统中。这个"实战java高并发程序设计"的源码下载提供了深入理解和实践Java并发编程的机会。下面,我们将深入探讨Java并发...

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

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

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

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

    实战Java高并发程序设计-随书代码

    《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,随书代码提供了大量示例,帮助读者深入理解并掌握在实际开发中如何处理高并发场景下的问题。本书的核心知识点涵盖了Java并发编程的基础理论、核心...

    java 高并发解决 思路

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

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

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

    实战JAVA高并发程序设计—源代码

    在《实战JAVA高并发程序设计—源代码》中,我们探讨的是如何利用Java语言来构建高效、稳定且可扩展的并发应用程序。这个资料包包含了丰富的源代码示例,旨在帮助开发者深入理解Java并发编程的核心概念和技术。以下是...

    实战java高并发编程

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

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

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

    JAVA并发程序设计实践

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

    Java高并发设计.zip

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

Global site tag (gtag.js) - Google Analytics