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

本文通过一个简单的程序对比了使用AtomicInteger类与synchronized关键字在多线程环境下进行计数操作的效率。实验创建了10个线程,每个线程分别执行100万次递增操作。结果显示,在多线程并发场景下,AtomicInteger类提供的原子操作比传统的synchronized机制更加高效。

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

    static Object obj = new Object();
    AtomicInteger atomicInteger = new AtomicInteger();
    int count = 0;

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

        // 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 < 1000000; i++) {
            atomicInteger.incrementAndGet();// 原子操作
        }
    }
    void m2() {
        for (int i = 0; i < 1000000; i++) {
            synchronized (this) {
                count++;
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值