博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtomicInteger源码分析
阅读量:4229 次
发布时间:2019-05-26

本文共 673 字,大约阅读时间需要 2 分钟。

AtomicInteger的实现主要是通过方法compareAndSet实现的,这个方法底层是调用了native的方法,下面看下这个方法。

public final boolean compareAndSet(int expect, int update)

这个方法第一个参数是expect,为原来的值。update为修改后的值。如果当前的值为expect,就修改为update的值,整个过程是一个原子操作。

那这个类是如何保证自增不冲突的呢,我们看一下具体的实现。

public final int incrementAndGet() {        return unsafe.getAndAddInt(this, valueOffset, 1) + 1;    }    public final int getAndAddInt(Object var1, long var2, int var4) {        int var5;        do {            var5 = this.getIntVolatile(var1, var2);        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));        return var5;    }

主要看getAndAddInt方法,这个方法是一个循环,先获取值,然后用原值去比较以及新增,如果新增失败了,再去获取值重试。这就是一个自旋锁,线程不释放资源一直重试,直到新增成功。

转载地址:http://hsjqi.baihongyu.com/

你可能感兴趣的文章
The Database Hacker's Handbook: Defending Database Servers
查看>>
IT Administrator's Top 10 Introductory Scripts for Windows
查看>>
Algorithms and Data Structures: The Science of Computing
查看>>
ASP.NET 2.0 Cookbook
查看>>
Java I/O
查看>>
Visual C# 2005 Demystified
查看>>
Unlocking Microsoft C# V 2.0 Programming Secrets
查看>>
Programming Excel with VBA and .NET
查看>>
SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach
查看>>
Core Python Programming
查看>>
Creating Database Web Applications with PHP and ASP
查看>>
ASP.NET 2.0 Demystified
查看>>
Pattern-Oriented Software Architecture, Volume 2, Patterns for Concurrent and Networked Objects
查看>>
Pattern-Oriented Software Architecture, Volume 1: A System of Patterns
查看>>
Database Programming with Visual Basic® .NET and ADO.NET: Tips, Tutorials, and Code
查看>>
Penetration Testing and Network Defense
查看>>
Object-Oriented Programming: From Problem Solving to Java
查看>>
Linux Network Security
查看>>
Essential SourceSafe
查看>>
Office 2003 Application Development All-in-One Desk Reference For Dummies
查看>>