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 条评论
登录 后参与评论

相关文章

来自专栏小灰灰

JDK容器学习之LinkedList:底层存储&读写逻辑

LinkedList的底层结构及读写逻辑 链表容器,通常适用于频繁的新增删除,遍历的方式访问数据元素的场景 LinkedList 底层数据结构为链表,非线程安...

1958
来自专栏拭心的安卓进阶之路

Java 集合深入理解(11):LinkedList

今天心情鱼肚白,来学学 LinkedList 吧! 日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。 我们...

2877
来自专栏数据结构与算法

BZOJ4939: [Ynoi2016]掉进兔子洞(莫队 bitset)

那么第$i$个询问的答案为$r1 - l1 + r2 - l2 + r3 - l3 + 3 - min(cnt1[x], cnt2[x], cnt3[x])$

851
来自专栏文武兼修ing——机器学习与IC设计

栈与栈的实现栈栈的基本操作栈的实现

栈 栈是一种基础的数据结构,只从一端读写数据。基本特点就”后进先出“,例如顺序入栈1,2,3,4,5,再顺序出栈是5,4,3,2,1 栈的基本操作 栈的基本操作...

3185
来自专栏desperate633

LeetCode 20. Valid Parentheses题目分析代码

给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。

872
来自专栏haifeiWu与他朋友们的专栏

死磕Java之聊聊LinkedList源码(基于JDK1.8)

我们主要看研究一下下面的几个方法,LinkedList其他方法都是通过调用这几个方法来实现功能,包括LinkedList的双端队列的方法也是。

1234
来自专栏LinkedBear的个人空间

唠唠SE的集合-05——LinkedList 原

由于LinkedList:每一个元素在内存中的地址不连续,需要让上一个元素记住下一个元素。

831
来自专栏我的技术专栏

数据结构图文解析之:栈的简介及C++模板实现

1555
来自专栏Java技术栈

你知道void和Void的区别吗?

区别 void 用于无返回值的方法定义。 Void Void是void的包装方法,和其他基础类型的包装方法不同是Void不能被实例化,Void还可用于一直返回n...

34611
来自专栏魂祭心

原 Promise 实现

2925

扫码关注云+社区

领取腾讯云代金券