Java多线程编程核心技术之原子类

版权声明: https://blog.csdn.net/Soul_Programmer_Swh/article/details/85799987

使用原子类进行i++操作

        除了在i++操作时使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类进行实现。

        原子操作是不能分割的整体,没有其他线程能够中断或检查正在原子操作中的变量。一个原子类型(atomic)就是一个原子操作可用的类型,它可以在没有锁的情况下做到线程安全。

文件AddCountThread.java代码如下:

package com.example.demo;

import java.util.concurrent.atomic.AtomicInteger;

public class AddCountThread extends Thread {
    private AtomicInteger count = new AtomicInteger(0);

    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(count.incrementAndGet());
        }
    }
}

文件Run.java代码如下:

package com.example.demo;

import com.example.demo.AddCountThread;

public class Run {
    public static void main(String[] args) {
        AddCountThread countService = new AddCountThread();
        Thread t1 = new Thread(countService);
        t1.start();
        Thread t2 = new Thread(countService);
        t2.start();
        Thread t3 = new Thread(countService);
        t3.start();
        Thread t4 = new Thread(countService);
        t4.start();
        Thread t5 = new Thread(countService);
        t5.start();
    }
}

 运行结果:

原子类也并不完全安全

        原子类在具有逻辑性的情况下输出结果也具有随机性。

        原子类方法是原子性的,但是方法与方法之间的调用却不是原子的(即不同的线程调用原子类方法)。解决这样的问题需要用到同步(synchronized)。

扫描二维码关注公众号,回复: 4828581 查看本文章

猜你喜欢

转载自blog.csdn.net/Soul_Programmer_Swh/article/details/85799987