【无标题】

写一个程序,证明AtomXXX类比synchronized更高效

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/10/09/14:57
 * @Version
 * @Description 6、写一个程序,证明AtomXXX类比synchronized更高效
 */
public class ZDemo05 {
    static Object obj = new Object();
    AtomicInteger atomicInteger = new AtomicInteger();
    int count = 0;

    public static void main(String[] args) {
        ZDemo05 z = new ZDemo05();

        // atomicxxx
        long time1 = time(z::m);
        System.out.println(z.atomicInteger);

        // synchronized
        long time2 = time(z::m2);
        System.out.println(z.count);

        try {
            TimeUnit.SECONDS.sleep(12);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("AtomicXxx");
        System.out.println(time1);
        System.out.println("synchronized");
        System.out.println(time2);
    }


    private static long time(Runnable runnable) {
        List<Thread> threads = new ArrayList<>();
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            threads.add(new Thread(runnable, "thread-" + i));
        }
        threads.forEach(Thread::start);
        threads.forEach(o -> {
            try {
                o.join();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        long endTime = System.currentTimeMillis();
        return endTime - startTime;
    }
    void m (){
        for (int i = 0; i < 100000000; i++) {
            atomicInteger.incrementAndGet();// 原子操作
        }
    }
    void m2() {
        for (int i = 0; i < 100000000; i++) {
            synchronized (this) {
                count++;
            }
        }
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值