原子类

原子类

  java.util.concurrent.atomic包:原子类的小工具包,支持在单个变量上解除锁的线程安全编程

原子变量类相当于一种泛化的 volatile 变量,能够支持原子的和有条件的读-改-写操作。AtomicInteger 表示一个int类型的值,并提供了 get 和 set 方法,这些 Volatile 类型的int变量在读取和写入上有着相同的内存语义。它还提供了一个原子的 compareAndSet 方法(如果该方法成功执行,那么将实现与读取/写入一个 volatile 变量相同的内存效果),以及原子的添加、递增和递减等方法。AtomicInteger 表面上非常像一个扩展的 Counter 类,但在发生竞争的情况下能提供更高的可伸缩性,因为它直接利用了硬件对并发的支持。

java中的原子类大致可以分为四个类:

  原子更新基本类型;

  原子更新数组类型;

  原子更新引用类型;

  原子更新属性类型;

  这些原子类中都是用了无锁的概念,有的地方直接使用CAS操作的线程安全的类型;

代码实现:

package com.zn.atomicTest;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicTest {
    //定义一个原子类对象
    private AtomicInteger atomicInteger=new AtomicInteger();
    public void getCount(){
        //+1再返回
        System.out.println(atomicInteger.incrementAndGet());
    }

    public static void main(String[] args) {
        AtomicTest test=new AtomicTest();
        for (int i = 1; i <=2; i++) {
            new Thread(()->{
                for (int j = 1; j <=100; j++) {
                    test.getCount();
                }
            }).start();
        }
    }
}

控制台效果:

  

原文地址:https://www.cnblogs.com/Zzzzn/p/12575192.html

时间: 2024-08-30 18:34:53

原子类的相关文章

并发编程的艺术第七章-13个原子类介绍

java中的13个原子类操作 13个原子类操作主要分为四大类:原子更新基本类型,原子更新数组,原子更新引用,原子更新属性(字段) atomic 的类基本都是unsafe类的包装类 原子更新基本类型包括: atomicBoolean atomicIneger atomicLong 这里注意lazyset方法,Doug Lea大神已经在oracle官网解释了,原文如下 "As probably the last little JSR166 follow-up for Mustang, we adde

java多线程系类:JUC原子类:04之AtomicReference原子类

概要 本章对AtomicReference引用类型的原子类进行介绍.内容包括:AtomicReference介绍和函数列表AtomicReference源码分析(基于JDK1.7.0_40)AtomicReference示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514623.html AtomicReference介绍和函数列表 AtomicReference是作用是对"对象"进行原子操作. AtomicReference函数列

java多线程系类:JUC原子类:03之AtomicLongArray原子类

概要 AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似.本章以AtomicLongArray对数组类型的原子类进行介绍.内容包括:AtomicLongArray介绍和函数列表AtomicLongArray源码分析(基于JDK1.7.0_40)AtomicLongArray示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514604.html

前端使用原子类的优劣?

作者:于江水链接:https://www.zhihu.com/question/22110291/answer/20328000来源:知乎著作权归作者所有,转载请联系作者获得授权. <编写高质量代码 Web前段开发修炼之道>一书中,提倡并提供了一套原子类,于是我就开始在个人和外包的项目中开始使用原子类. 用的多了,你就会明白原子类的优劣以及如何使用了.下面是我的几点感悟: 原子类的缺点: 1,维护困难.类似 m20(表示 margin 20px ) 这样的超级常用的原子类,会遍布网页中的很多

java多线程系类:JUC原子类:05之AtomicIntegerFieldUpdater原子类

概要 AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater这3个修改类的成员的原子类型的原理和用法相似.本章以对基本类型的原子类进行介绍.内容包括:AtomicLongFieldUpdater介绍和函数列表AtomicLongFieldUpdater示例AtomicLongFieldUpdater源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.com

java 线程 原子类相关操作示例 thinking in java4 目录21.3.4

java 线程  原子类相关操作示例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类,

Java并发编程-非阻塞同步方式原子类(Atomic)的使用

非阻塞同步 在大多数情况下,我们为了实现线程安全都会使用Synchronized或lock来加锁进行线程的互斥同步,但互斥同步的最主要的问题就是进行线程的阻塞和唤醒所带来的性能问题,因此这种阻塞也称作阻塞同步.从处理问题的方式上说,互斥同步属于一种悲观的并发策略,总是认为只要不去做正确的同步措施,那就肯定会出现问题,无论共享数据是否真的会出现竞争,它都会进行加锁.用户态核心态转换.维护锁的计数器和检查是否有被阻塞的线程需要被唤醒等操作. 随着硬件指令集的发展,我们有了另一个选择:基于冲突检测的乐

JAVA并发API源码解析:原子类

在JAVA API的java.util.concurrent.atomic包下提供了一系列以基本类型包装类为基础的并发情况下不需要同步的类(借助硬件相关指令实现). 首先看一个例子AutomicInteger: public class AtomicInteger extends Number implements java.io.Serializable { private static final long serialVersionUID = 6214790243416807050L; p

Java8 更快的原子类:LongAdder

更快的原子类:LongAdder 大家对AtomicInteger的基本实现机制应该比较了解,它们是在一个死循环内,不断尝试修改目标值,知道修改成功,如果竞争不激烈,那么修改成功的概率就很高,否则,修改失败的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响 那么竞争激烈的时候,我们应该如何进一步提高系统性能呢?一种基本方案就是可以使用热点分离,将竞争的数据进行分解.基于这个思路,打击应该可以想到一种对传统AtomicInteger等原子类的改进方法,虽然在CA

java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类