Java AtomicInteger

描述

使用 Java AtomicInteger 解决 int 变量运算的原子性问题。

题目

请使用编程案例解决 线程原子性 问题。

题目解决思路

  1. 定义一个静态 AtomicInteger 类型的变量。
  2. 创建一个线程,线程中运用循环对该变量自增 5000 次。
  3. 创建一个线程,线程中运用循环对该变量自增 5000 次。
  4. 打印最终结果值。

代码具体实现

public class Test { static AtomicInteger sum = new AtomicInteger(); public static void main(String[] args) throws InterruptedException { System.out.println("嗨客网(www.haicoder.net)\n"); Thread t1 = new Thread("Thread01"){ @Override public void run() { for (int i = 1; i <= 5000; i++) { sum.incrementAndGet(); } } }; Thread t2 = new Thread("Thread02"){ @Override public void run() { for (int i = 1; i <= 5000; i++) { sum.incrementAndGet(); } } }; t1.start(); t2.start(); t1.join(); // 确保线程 t1 运行完毕,再执行主线程 t2.join(); // 确保线程 t2 运行完毕,再执行主线程 System.out.println("计算结果:" + sum); } }

运行结果如下图:

09 Java AtomicInteger.png

以上案例发现,两个线程都进行自增 5000 次之后,结果等于 10000 ,此处可以发现多线程的原子性安全问题已经解决了。