当前位置: 首页 > news >正文

Java中的i++是原子操作吗?

我们都知道i++分为三步进行,分别是1:取到当前i的值2:++3:将最终结果赋值

因此我们可通过创建两个线程,对同一个变量count,一个线程对count进行递增操作,另一个线程对count进行递减操作。每个线程都执行100次操作。

如果count的操作是原子操作,那么最终的结果应该是0。但是如果count的操作不是原子操作,那么由于两个线程并发执行,可能会出现数据竞争,a线程在进行操作时,任何情况下都会被b线程打断,导致最终结果不是0。

代码实现如下所示:

package com.wjr.redis;public class AtomicityTest {private static int count = 0;public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new IncrementTask());Thread t2 = new Thread(new DecrementTask());t1.start();t2.start();/*调用join()方法会阻塞当前线程,主线程会等待t1和t2线程执行完成后再继续执行*/t1.join();t2.join();System.out.println("Final count value: " + count);}static class IncrementTask implements Runnable {@Overridepublic void run() {for (int i = 0; i < 100; i++) {count++;}}}static class DecrementTask implements Runnable {@Overridepublic void run() {for (int i = 0; i < 100; i++) {count--;}}}
}

我们多次运行会发现count不为0且有好几种不同的结果,因此Java中的i++并不是原子操作。

http://www.lryc.cn/news/248744.html

相关文章:

  • git commit message 书写规范
  • sql 注入 ctf wiki
  • Flutter创建TabBar
  • 双流网络论文精读笔记
  • 机器人与3D视觉 Robotics Toolbox Python 一 安装 Robotics Toolbox Python
  • JS之Object.defineProperty方法
  • 卷积神经网络(CNN)注意力检测
  • 4. 权限,特权
  • 云原生系列Go语言篇-泛型Part 2
  • 借助ETL快速查询金蝶云星空表单信息
  • 基于深度学习的驾驶员状态监测预警系统(正文)
  • 读书笔记之《价值》张磊
  • 【shell】文本三剑客之sed详解
  • Centos7 制作Openssh9.5 RPM包
  • C语言--每日选择题--Day30
  • LeetCode 274. H指数——排序
  • 【洛谷 B2038】奇偶 ASCII 值判断 题解(顺序结构+取余)
  • Ubuntu 20.4 源代码方式安装 cdo(笔记)
  • 电子学会C/C++编程等级考试2022年12月(三级)真题解析
  • 二叉树的最近公共祖先(C++实现)
  • 【conda】容易遗忘的命令使用总结
  • 蓝桥杯第一天-----时间显示
  • 多文件夹图片预处理:清除空值、重置大小、分割训练集
  • 【Java】集合 之 使用 Map
  • 第二证券:股票几点到几点开盘?
  • goweb入门教程
  • 量子计算:探索未来的计算技术
  • HarmonyOS应用开发者基础认证考试题目及答案
  • c# 文件读取和写入
  • 【MySQL库的操作】