多线程的原子操作

简介: 多线程的原子操作

20200228205514658.png

package com.chot;
/**
 * @program: rtm
 *
 * @description: 原子操作demo
 *
 * @author: ninesun
 *
 * @create: 2019-11-18 09:28
 **/
import java.util.concurrent.atomic.AtomicInteger;
/*
 * 下边两个操作多试几次总会出现不一样的值
 * 这是因为第一个操作是非线程安全的,会出现多个线程同时操作一个值的情况
 * 后边那个则是原子操作有不可分割性质,所以不会出现那种情况
 * */
public class TestMyAtomic {
  static int index = 0;
  static int num = 10000;
  static AtomicInteger atomicIndex = new AtomicInteger(0);//设置初始值为0
  public static void main(String[] args) {
    //情况一
    //正常的index++操作属于非原子性操作
    //创建一万个线程进行index++操作
    Thread[]  threads = new Thread[num];
    for (int i = 0; i < num; i++) {
      Thread t = new Thread() {
        @Override
        public void run() {
          index++;
        }
      };
      t.start();
      threads[i] = t;
    }
    for (Thread t : threads) {
      try {
        //确保当前t线程加入主线程,运行完毕再继续后边操作
        t.join();
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    System.out.println(index);
    //情况二
    //以下是原子操作
    Thread[]  threadsAtomic = new Thread[num];
    for (int i = 0; i < num; i++) {
      Thread t = new Thread() {
        @Override
        public void run() {
          atomicIndex.incrementAndGet();
        }
      };
      t.start();
      threadsAtomic[i] = t;
    }
    for (Thread t : threadsAtomic) {
      try {
        //确保当前t线程加入主线程,运行完毕再继续后边操作
        t.join();
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    System.out.println(atomicIndex.intValue());
  }
}
目录
相关文章
|
4月前
【原子操作】顺序操作
【原子操作】顺序操作
|
4月前
多线程并发锁的方案—原子操作
多线程并发锁的方案—原子操作
|
11天前
|
Linux API C++
c++多线程——互斥锁
c++多线程——互斥锁
|
5月前
|
API 调度 C语言
互斥锁,自旋锁,原子操作的原理,区别和实现
v互斥锁,自旋锁,原子操作的原理,区别和实现
33 0
|
2月前
|
安全 中间件 编译器
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
166 2
|
9月前
|
Go
Gomutex的原子操作
要对一个 int32 类型的变量执行原子递增操作,可以使用 sync/atomic 包中的 AddInt32 函数
42 0
|
9月前
|
安全 算法 Linux
【多线程中的线程安全问题】线程互斥
【多线程中的线程安全问题】线程互斥
114 0
【多线程:多把锁问题】
【多线程:多把锁问题】
86 0
|
Java API
并发编程之原子操作
这并不是一个化学课,而是巧妙的借用了化学上的一个概念,即原子是最小的粒子,不可再分;原子操作也是不能再分的操作; 为了能把这个讲明白,下文基本都是大白话,其实Java本来并不是很难,而是总有一些人喜欢把简单的概念给复杂化。小编不喜欢 那种说辞,所以尽量简单易懂。如有问题,欢迎提出问题。共同交流进步,最后谢谢你的阅读
105 0
|
存储 并行计算
原子操作原子操作的适用场景
原子操作原子操作的适用场景
326 0
原子操作原子操作的适用场景