package cn.itcast.thread;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class Test12 implements Runnable { // 定义整型并发原子对象 private static AtomicInteger atomicInteger = new AtomicInteger(0); @Override public void run() { try { // 线程休眠 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } // 进行原子性操作+1 System.out.println(atomicInteger.incrementAndGet()); } public static void main(String[] args) throws InterruptedException { // 创建List集合 List<Thread> list = new ArrayList<>(); Test12 task = new Test12(); // 开启多线程进行操作共享变量 for (int i = 0; i <10 ; i++) { Thread thread = new Thread(task); list.add(thread); thread.start(); } for (Thread thread : list) { thread.join(); // 确保所有thread全部运行 } System.out.println("递增结果:" + atomicInteger.get()); }}
运行效果文章插图
15、原子更新数组类型目标:掌握java.util.concurrent.atomic包下原子更新数组类型
介绍
通过原子的方式更新数组里的某个元素,Atomic包提供了以下3个类 。这几个类提供的方法几乎一样,所以本节仅以AtomicIntegerArray为例进行讲解 。
package cn.itcast.thread;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicIntegerArray;public class Test13 implements Runnable{ // 定义数组 private static int[] ints = {0,2,3}; // 定义原子整型数组对象 private static AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(ints); @Override public void run() { try { // 线程休眠 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } // 操作普通数组中的第一个元素 +1 ints[0] = ints[0] + 1; // 操作原子数组中的第一个元素 +1 System.out.println(atomicIntegerArray.incrementAndGet(0)); } public static void main(String[] args) throws InterruptedException { // 创建List集合 List<Thread> list = new ArrayList<>(); Test13 task = new Test13(); // 开启多线程进行操作共享变量 for (int i = 0; i <10 ; i++) { Thread thread = new Thread(task); list.add(thread); thread.start(); } for (Thread thread : list) { thread.join(); // 确保所有thread全部运行 } System.out.println("原子数组操作结果:" + atomicIntegerArray.get(0)); // 10 System.out.println("普通数组操作结果:" + ints[0]); // 不一定 }}
运行效果文章插图
注意:
数组value通过构造方法传递进去,然后AtomicIntegerArray会将当前数组复制一份,所以当AtomicIntegerArray对内部的数组元素进行修改时 , 不会影响传入的数组 。16、原子更新引用类型目标:使用原子操作更新引用类型数据(也就是原子更新多个变量)
介绍
原子更新基本类型的AtomicInteger , 只能更新一个变量,如果要原子更新多个变量,就需要使用这个原子更新引用类型提供的类 。Atomic包提供了以下3个类:
推荐阅读
- “正科级”公务员退休后有多少钱?40年工龄的话,预计是这个数
- 女人对你有好感,哪怕嘴上不说,这7个肢体语言也藏不住
- “无性婚姻”有多可怕?听听3个过来人的故事,希望你能引以为戒
- 家里放了几年的红茶、绿茶、普洱茶,还能喝吗?医生告诉你实话
- 求求你们别再换脸了,就像好好的一盘菜吃出苍蝇的感觉!
- 拒认儿子巴图20年,晚年态度翻转,是居心叵测,还是真后悔?
- 教你自己制作花生酱,教你自制花生酱
- 微博该咋得才可以删除评论,为什么微博评论删除后还有显示
- 《我知道我爱你》热播:和冬天适配的偶像剧
- 李善均离世早有端倪?留下遗书后离家,现场有点燃闪电弹的痕迹