专栏首页行者常至009.多线程-AtomicInteger

009.多线程-AtomicInteger

版权声明:本文为博主原创文章,允许转载,请标明出处。

package cn.qbz.thread;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicTest {
    public static void main(String[] args) {
        AtomicInteger count = new AtomicInteger(0);
        //分10个线程,每个线程自增2000次
        for (int i = 0; i < 10; i++) {
            new Thread(new ThreadTest1(count)).start();
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(count.get());

    }
}

class ThreadTest1 implements Runnable {
    private AtomicInteger integer;

    ThreadTest1(AtomicInteger integer) {
        this.integer = integer;
    }

    public void run() {
        for (int i = 0; i < 2000; i++) {
            integer.incrementAndGet();
        }
    }
}

此时的数值会小于20000

package cn.qbz.thread;


public class AtomicTest {
	//静态变量可为多线程共享
    private static Integer count = 0;

    public static void main(String[] args) {
        //分10个线程,每个线程自增2000次
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                public void run() {
                    for (int i = 0; i < 2000; i++) {
                        count++;
                    }
                }
            }).start();
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(count);

    }
}

如上面一样,使用AtomicInteger

package cn.qbz.thread;


import java.util.concurrent.atomic.AtomicInteger;

public class AtomicTest {

    public static void main(String[] args) {
        final AtomicInteger count = new AtomicInteger(0);
        //分10个线程,每个线程自增2000次
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                public void run() {
                    for (int i = 0; i < 2000; i++) {
                        count.incrementAndGet();
                    }
                }
            }).start();
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(count.get());

    }
}

其他的Atomic类与此类似

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 013.多线程-ThreadLocal

    qubianzhong
  • 遍历类的属性和值,取两个类的同一属性的不同值。

    qubianzhong
  • java内存分配

    转自:http://www.iteye.com/topic/634530 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2...

    qubianzhong
  • RPC编程

    RPC全称Remote Procedure Call,即远程方法调用。它的表现形式是:

    小蜜蜂
  • Java实现几种简单的重试机制

    背景 当业务执行失败之后,进行重试是一个非常常见的场景,那么如何在业务代码中优雅的实现重试机制呢? 设计 我们的目标是实现一个优雅的重试机制,那么先来看下怎么...

    一灰灰blog
  • Android学习--持久化(一) 文件存储

    持久化之   文件存储        这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存...

    Mr.RisingSun
  • springboot集成shiro

    是不是发现一般权限模块都是领导(或者技术大神)写的,你只管用就好了?不想当领导的程序猿不是好厨子。废话少说,先简单说下怎么用,黑猫白猫,会写权限才可能是高级猫,...

    小尘哥
  • 2013年多校 hdu 4602

    用户2965768
  • SpringBoot全局异常处理

    估计大家都会了的^_^,本文代码为主,在做Web应用的时候,请求处理过程中发生错误是非常常见的情况,那我们如何才能统一且友好地返回系统异常给前台呢。

    用户3467126
  • Java基础系列(四十二):集合之AbstractList

    AbstractList是实现List接口的一个抽象类,它的地位之与List类似于AbstractCollection之与Collection,同事,Abstr...

    山禾说

扫码关注云+社区

领取腾讯云代金券