举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java原子性 Java 原子变量

java原子性 Java 原子变量

2023-03-16 14:20 Java教程

java原子性 Java 原子变量

java原子性

Java原子性是指在Java编程语言中,一个操作或者一个表达式的执行是不可分割的,即使在多线程的情况下也是如此。它可以保证操作的原子性,即不会被中断。

Java原子性是由JVM实现的,它可以保证在多线程情况下,一个操作或者表达式不会被其他线程打断。这样就能保证数据的安全性和正确性。

Java中有一些特殊的原子操作,例如volatile关键字、synchronized关键字和CAS(Compare and Swap)操作。这些特殊的原子操作可以帮助开发者保证多线程情况下数据的正确性和安全性。

public class AtomicExample {

    private static AtomicInteger counter = new AtomicInteger(0);

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {

            new Thread(() -> {

                for (int j = 0; j < 1000; j++) {

                    counter.incrementAndGet();

                }

            }).start();

        }

        while (Thread.activeCount() > 1) {  // 保证前面的线程都执行完

            Thread.yield();

        }

        System.out.println(counter);  // 输出最后的值 10000 
    }
}

Java 原子变量

Java线程教程 - Java原子变量

新线程并发包

java.util.concurrent和java.util.concurrent.atomic和java.util.concurrent.locks包括非常有用的并发构造。

线程并发包以四种方式支持并发。

  • 原子变量
  • 同步器
  • 并发集合

原子变量

原子变量类的命名类似于AtomicXxx,例如,AtomicInteger类用于表示一个int变量。

原子变量可用于在不使用任何锁的情况下以原子方式对单个变量执行多个指令。

  • 标量原子变量类

    AtomicInteger,AtomicLong和AtomicBoolean类分别支持对原始数据类型int,long和boolean的操作。

    当引用变量需要以原子方式更新时,AtomicReference类用于处理引用数据类型。

  • 原子数组类

    有三个类称为AtomicIntegerArray,AtomicLongArray和AtomicReferenceArray,它们表示一个int,long和引用类型的数组,其元素可以进行原子性更新。

  • 原子字段更新程序类

    有三个类称为AtomicLongFieldUpdater,AtomicIntegerFieldUpdater和AtomicReferenceFieldUpdater,可用于使用反射以原子方式更新类的易失性字段。

    要获得对这些类的对象的引用,您需要使用他们的工厂方法newUpdater()。

  • 原子复合变量类

例子

以下代码显示如何使用AtomicLong类来创建计数器。

import java.util.concurrent.atomic.AtomicLong;

public class AtomicCounter {
  private AtomicLong value = new AtomicLong(0L);

  public long next() {
    return value.incrementAndGet();
  }
}
阅读全文
以上是名动网为你收集整理的java原子性 Java 原子变量全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们