`

AtomicInteger 源码分析

阅读更多
AtomicInteger 是如何实现原子操作的了?

答案是 CAS(compare and swap)

CAS是 Java Unsafe 类中实现的一些 native 方法,底层代码使用 c/c++ 编写,java 通过 jni 进行调用,在底层芯片级别保证原子操作的进行.


举个例子:假设有两个线程执行 i++ 语句,初始时 i = 0. 那么最终的输出结果可能不为 2. 因为 Java 内存模型的缘故,导致一个线程的修改还没有更新到主存中,另一个线程也进行了修改,最终的结果可能是 1.
0
0
分享到:
评论

相关推荐

    java并发之AtomicInteger源码分析

    Java并发之AtomicInteger源码分析 AtomicInteger是Java并发包下面提供的原子类,主要操作的是int类型的整型,通过调用底层Unsafe的CAS等方法实现原子操作。下面是对AtomicInteger的源码分析。 1. 什么是原子操作...

    JUC并发编程与源码分析视频课.zip

    《JUC并发编程与源码分析视频课》是一门深入探讨Java并发编程的课程,主要聚焦于Java Util Concurrency(JUC)库的使用和源码解析。JUC是Java平台提供的一组高级并发工具包,它极大地简化了多线程编程,并提供了更...

    线程池ThreadPoolExecutor原理源码分析.md

    ### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    ### 二、线程池的五种状态变换源码分析 线程池状态的变化主要由以下几个状态表示: - **RUNNING**:线程池接受新的任务并将队列中的任务提交给worker线程。 - **SHUTDOWN**:不再接受新任务,但继续处理队列中的...

    详解Java线程池的ctl(线程池控制状态)【源码分析】.docx

    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); ``` 这里的`ctlOf(RUNNING, 0)`调用实际上是将线程池设置为初始状态`RUNNING`并且当前没有活动的工作线程。 #### 2. 两个工具人常量...

    并发编程、juc工具包源码分析笔记

    在深入学习 Java 并发编程时,还需要关注线程安全、锁机制(如 synchronized 关键字、ReentrantLock 等)、并发容器(如 ConcurrentHashMap、ConcurrentLinkedQueue 等)、原子变量(AtomicInteger、AtomicReference...

    《Java Concurrency in Practice》源码

    源码分析将帮助我们更深入地理解书中的概念和示例。 1. **线程安全**:书中阐述了线程安全的概念,即在多线程环境下,一个类或方法能够正确地处理多个线程的访问,不会导致数据不一致或引发其他意外行为。线程安全...

    并发编程atomic&collections-课上笔记1

    本文主要讲述了 Java 中的并发编程,包括 atomic 包的介绍、CAS 算法的原理、ABA 问题的解决方案,以及 collections 中的 HashMap、HashTable 和 ConcurrentHashMap 的源码分析。 Atomic 包的介绍 ----------------...

    CAS源码分析,以及ABA问题的解决

    CAS(比较并交换)一个小demo ... AtomicInteger atomicInteger = new AtomicInteger(5); //compareAndSet期望并交换,期望是第一个参数,期望拿走内存时和放回时实际内存值相同,更新值是更新到多少 Sys

    java并发编程源码

    《Java并发编程源码》是深入理解Java多线程编程技术的重要参考资料,它包含了实际案例和源代码,有助于...源码学习是提高编程技能的有效途径,特别是对于复杂的并发场景,源码分析能帮助我们更好地理解和解决问题。

    葛一鸣 实战java高并发程序设计 源码

    源码分析: 1. **线程与多线程**:Java中的线程是并发编程的基础,通过`Thread`类或实现`Runnable`接口可以创建线程。源码中可能包含各种线程的创建和管理方式,如`start()`方法启动线程,`join()`等待线程结束,...

    JDK源码,整合所有内容

    - `java.util.concurrent`包提供了丰富的并发工具类,如`ExecutorService`、`Future`、`Semaphore`等,源码分析有助于理解并发编程的底层机制。 - **原子类**:`Atomic*`系列类提供原子操作,保证线程安全,如`...

    Java多线程设计模式(带源码)

    本资源提供了详细的Java多线程设计模式的解析,包括源码分析,帮助开发者深入理解并熟练应用这些模式。 在多线程环境中,设计模式是解决常见问题的最佳实践,它们可以帮助开发者创建高效、可维护的并发代码。以下是...

    Java并发编程从入门到精通源码.rar

    总的来说,这个资源包涵盖了Java并发编程的核心概念和技术,结合源码分析,学习者可以深入理解并发编程的原理,提升在实际项目中的应用能力。通过实践和调试源码,可以更好地掌握这些知识点,提高解决问题的能力。

    Java高并发核心编程(卷2)源码

    源码分析可以帮助理解它们如何保证线程安全和并发性能。 5. **原子类**:`Atomic`系列类(如`AtomicInteger`、`AtomicLong`、`AtomicReference`等)提供了无锁编程的支持。源码中可能会展示如何使用原子类实现高效...

    java7并发编程实战手册+源码

    配合书中的源码分析,可以更直观地理解多线程编程的实践技巧。同时,111.zip可能包含书中的一些示例代码或补充材料,进一步加深对知识的理解和实践。 总的来说,Java 7在并发编程方面提供了许多强大的工具和机制,...

    java产生序列号源码

    在Java编程中,序列号(Serial Number)通常用于标识唯一对象或者进行数据持久化时保持...源码分析可以帮助你掌握如何将这些理论知识应用于实际项目中。如果你遇到任何问题或者需要更具体的代码示例,欢迎进一步提问。

    java concurrent 精简源码

    这个“java concurrent 精简源码”资源很可能会包含上述概念的实际应用示例,通过学习和分析这些代码,你可以深入理解Java并发编程的精髓,并能更好地应用于实际项目中。在研究时,建议结合Java官方文档和相关的书籍...

    JAVA面试题并发篇源码及资料

    资源包中的源码分析和实战案例将有助于将理论知识转化为实践能力,提高解决并发问题的能力。在准备面试时,不仅要理解这些概念,还要能够结合实际场景进行分析和设计,以展示出良好的问题解决能力和技术深度。

Global site tag (gtag.js) - Google Analytics