• Java:多线程,java.util.concurrent.atomic包之AtomicInteger/AtomicLong用法


    1. 背景

    java.util.concurrent.atomic这个包是非常实用,解决了我们以前自己写一个同步方法来实现类似于自增长字段的问题。

    在Java语言中,增量操作符(++)不是原子的,也就是非线程安全的;在使用的时候,要保证数据同步,就需要使用类似于synchronized关键字等手段来保证数据正确。正因为如此,《Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)》一文中用synchronized关键字来实现一个自增长的字段。

    2. 实现代码

    如今使用java.util.concurrent.atomic包,问题简单多了。示范代码如下(没有synchronized关键字,没有Lock锁):

    package com.clzhang.sample.thread;
    
    import java.util.concurrent.atomic.AtomicInteger;
    import java.util.concurrent.atomic.AtomicLong;
    
    public class SimpleTest implements Runnable {
        // 创建AtomicInteger,初始值0(也可以指定初始值)
    //    private static final AtomicInteger nextSerialNum = new AtomicInteger();
        private static final AtomicLong nextSerialNum = new AtomicLong();
    
        @Override
        public void run() {
            
            // 直接取得当前值并增长1
            System.out
                    .println(Thread.currentThread().getName() + ":" + nextSerialNum.getAndIncrement());
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        }
    
        public static void main(String[] args) {
            SimpleTest st = new SimpleTest();
    
            for (int i = 0; i < 100; i++) {
                new Thread(st, "Thread" + i).start();
            }
        }
    }

    部分输出:
    Thread92:60
    Thread94:59
    Thread95:58
    Thread90:57
    Thread88:56
    Thread93:55

  • 相关阅读:
    操作系统简介
    计算机硬件知识整理
    使用 Docker LNMP 部署 PHP 运行环境
    Chart.js 动态图表的使用
    手把手教你使用 GitBook
    手把手教你发布自己的 Composer 包
    PHP 基础篇
    macOS 上安装 PECL
    Yii2 教程
    PHP 基础篇
  • 原文地址:https://www.cnblogs.com/nayitian/p/3264028.html
Copyright © 2020-2023  润新知