Java:原子操作类AtomicInteger代码示例

简介: Java:原子操作类AtomicInteger代码示例
package com.demo.atomic;
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicDemo {
    private static int count = 0;
    private static int synchronizedCount = 0;
    private static AtomicInteger atomicCount = new AtomicInteger();
    public static synchronized void addCount() {
        synchronizedCount++;
    }
    public static void main(String[] args) {
        // 创建5个线程
        Thread[] threads = new Thread[5];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = new Thread(() -> {
                for (int j = 0; j < 10; j++) {
                    // 修改值
                    count++;
                    atomicCount.getAndIncrement();
                    addCount();
                    // 延时
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
            threads[i].start();
            System.out.println("start" + i);
        }
        // 等待所有线程执行完毕继续
        for (int i = 0; i < threads.length; i++) {
            try {
                System.out.println("join" + i);
                threads[i].join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("count:" + count);
        System.out.println("atomicCount:" + atomicCount.get());
        System.out.println("synchronizedCount:" + synchronizedCount);
        /**
         * count:40
         * atomicCount:50
         * synchronizedCount:50
         */
    }
}

参考

原子操作类AtomicInteger详解

相关文章
|
8月前
|
安全 Java
JAVA 线程安全
【1月更文挑战第4天】JAVA 线程安全
|
2月前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
3月前
|
Java
Java的原子变量类
Java的原子变量类
19 0
|
8月前
|
安全 Java
Java一分钟之-并发编程:原子类(AtomicInteger, AtomicReference)
【5月更文挑战第18天】Java并发编程中的原子类如`AtomicInteger`和`AtomicReference`提供无锁原子操作,适用于高性能并发场景。`AtomicInteger`支持原子整数操作,而`AtomicReference`允许原子更新对象引用。常见问题包括误解原子性、过度依赖原子类以及忽略对象内部状态的并发控制。要避免这些问题,需明确原子操作边界,合理选择同步策略,并精确控制原子更新。示例代码展示了如何使用这两个类。正确理解和使用原子类是构建高效并发程序的关键。
103 1
|
7月前
|
存储 Java 索引
Java中的13个原子操作类
Java中的13个原子操作类
63 0
|
8月前
|
Java 编译器
一文带你了解Java中synchronized原理
一文带你了解Java中synchronized原理
65 0
|
监控 安全 Java
Java 线程安全问题
本文将探讨Java中的并发编程,着重关注线程安全和锁的使用。
50 0
|
人工智能 移动开发 Java
【Java基础】线程同步类 CountDownLatch
CountDownLatch是JDK提供的一个同步工具,它可以让一个或多个线程等待,一直等到其他线程中执行完成一组操作。 CountDownLatch 基于AQS构建同步器: AQS - AbstractQueuedSynchronizer ,即抽象的队列同步器,是一种用来**构建锁和同步器**的框架。
|
安全 Java
java中线程同步方法
java中线程同步方法
|
安全 Java
【Java】线程安全
【Java】线程安全
101 0
【Java】线程安全