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.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 TCP服务器 ServerSocket 类的一个对象表示Java中的TCP服务器套接字。 ServerSocket 对象可以接受来自远程客...
JavaFX教程 -JavaFX曲线立方曲线要创建三次曲线,请使用适当的构造函数。一个三次曲线的主要参数设置是startX,startY,controlX...
JavaFX教程 -JavaFX 切换按钮切换按钮具有两种状态:选择或未选择。我们通常将两个或多个切换按钮组合成一个组,并允许用户只选...
JavaFX教程 -JavaFX进度条进度条可视化JavaFX应用程序中的操作进度。import javafx.application.Application;import javafx.scen...