首页 > 其他分享 >原子类保证多线程环境下的数据安全的示例

原子类保证多线程环境下的数据安全的示例

时间:2024-11-14 16:08:33浏览次数:1  
标签:Thread 示例 num 数据安全 incrementThreadA new 多线程

原子类保证多线程环境下的数据安全的示例

 

1、原子整型类保证多线程环境下的数据安全示例:

package com.joyupx.cms.example.thread.concurrent.atomic;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 原子性操作
 * 多线程环境下保障数据安全。
 */
@Slf4j
public class AtomicIntegerIncrementExample {

    private static AtomicInteger num = new AtomicInteger(0);

    public static void main(String[] args) {
        Thread incrementThreadA = new Increment();
        Thread incrementThreadB = new Increment();

        incrementThreadA.start();
        incrementThreadB.start();

        try {
            incrementThreadA.join();
            incrementThreadB.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        // 值只要小于 20000 = 2 * 1000 就表示是非原子操作。
        log.info("num = {}", num);
    }

    static class Increment extends Thread {
        @Override
        public void run() {
            log.info("{} 自增前 num = {}", Thread.currentThread().getName(), num);

            /*
             * 数量太少了看不出来,所以这里给了 10000 次递增。
             * 具体次数取决于具体的硬件,比如 CPU、内存、线程数等,请酌情考虑。
             */
            for (int index = 0; index < 10000; ++index) {
                num.incrementAndGet();
            }

            log.info("{} 自增后 num = {}", Thread.currentThread().getName(), num.get());
        }
    }
}

  

 

2、原子长整型类保证多线程环境下的数据安全示例:

package com.joyupx.cms.example.thread.concurrent.atomic;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.atomic.AtomicLong;

/**
* 原子性操作
* 多线程环境下保障数据安全。
*/
@Slf4j
public class AtomicLongIncrementExample {

private static AtomicLong num = new AtomicLong(0);

public static void main(String[] args) {
Thread incrementThreadA = new Increment();
Thread incrementThreadB = new Increment();

incrementThreadA.start();
incrementThreadB.start();

try {
incrementThreadA.join();
incrementThreadB.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}

// 值只要小于 20000 = 2 * 1000 就表示是非原子操作。
log.info("num = {}", num);
}

static class Increment extends Thread {
@Override
public void run() {
log.info("{} 自增前 num = {}", Thread.currentThread().getName(), num);

/*
* 数量太少了看不出来,所以这里给了 10000 次递增。
* 具体次数取决于具体的硬件,比如 CPU、内存、线程数等,请酌情考虑。
*/
for (int index = 0; index < 10000; ++index) {
num.incrementAndGet();
}

log.info("{} 自增后 num = {}", Thread.currentThread().getName(), num.get());
}
}
}

  

标签:Thread,示例,num,数据安全,incrementThreadA,new,多线程
From: https://www.cnblogs.com/hapday/p/18546244

相关文章

  • Arduino语法详解_含示例详解
    Arduino的程序可以划分为三个主要部分:结构、变量(变量与常量)、函数。  结构部分 一、结构1.1setup()1.2loop()二、结构控制2.1if2.2if...else2.3for2.4switchcase2.5while2.6do...while2.7break2.8continue2.9return2.10goto三、扩展语法......
  • Jmeter (5.6.3) Windows 使用示例
    步骤:1.下载apache-jmeter-5.6.3.zip2.解压,在环境变量Path中,新增jMeter的bin文件夹的路径3.在bin文件夹中,双击jmeter.bat->打开JMeter4.在JMeter的窗口中:文件->新建(创建测试计划)5.测试计划右键:添加->线程(用户)->线程组6.线程组右键:添加->取样器->HTTP请求7.HTTP请......
  • 【多线程奇妙屋】你听说过设计模式吗?软件开发中可全局访问一个对象的设计模式——单例
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • java 实训第15天 Java 多线程
    Java多线程一、定义   java程序本身就是多线程的。   二、相关概念   1、操作系统   内核实现其他资源的管理和调度。   2、进程   一个进程就是操作系统中运行的一个应用程序,每个进程都有进程ID标志唯一性   3、线程   线程是计算......
  • 《线程池(Thread Pool):高效多线程处理的核心机制》
    在当今的软件开发领域,多线程编程已经成为提升程序性能和响应能力的关键技术。而线程池(threadpool)作为多线程处理中的一个重要概念,正发挥着不可或缺的作用。今天,我们就来深入探讨一下什么是线程池,以及它为什么如此重要。一、多线程编程的挑战与需求在传统的单线程程序中,代......
  • 信息时代的安全堡垒:500强企业数据安全传输案例解析
    数据安全传输,这个是数据安全里一个比较细分的领域,但是包括的传输场景也是很多的,比如隔离网之间的跨网文件传输、企业内外部之间的文件安全外发、总分支之间的数据传输分发、信创环境下的高性能传输、机台等设备的数据采集传输、业务系统之间的自动化传输同步等等。每家企业或多或......
  • Java面试之多线程&并发篇(2)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!Thread类中的start()和run()方法有什么区别?为什么wait,notify和notifyAll这些方法不在thread类里面?为什么wait和notify方法要在同步块中调用?Java中interrupted和isInterruptedd方法的区别?ava中synchronized和R......
  • pjsip编译、说明及vs2022使用示例
    环境:window10_x64&vs2022pjsip版本:2.14.1 之前整理过pjsip2.10的编译及python使用示例:https://www.cnblogs.com/MikeZhang/p/pjsip20210116.htmlhttps://www.cnblogs.com/MikeZhang/p/win10py3pjsua-20211010.html 今天整理下pjsip2.14.1的编译、接口说明,以及在vs......
  • [AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码
    文章目录一、前提准备1.阿里云账号2.开通录音识别服务3.获取APIKey和AccessToken二、阿里云录音识别API的主要功能介绍三、完整代码流程1.导入依赖库2.设置环境变量3.生成Token4.上传文件并发起识别请求4.1请求4.2请将'{api-key}'替换为你的apikey,'{ta......
  • Go语言并发编程:轻松驾驭多线程世界(九)
    Go语言并发编程:轻松驾驭多线程世界在这里插入图片描述在现代编程中,并发是让你的程序变得更强大、更高效的关键技能。幸运的是,Go语言提供了一种简单、直观的方式来处理并发任务,使用轻量级的Goroutine和Channel,让我们能够像指挥交通一样简单地处理多个任务。今天,我们将......