您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java并发多线程编程——JDK5提供的原子类的操作案例

小志的博客 发布时间:2021-04-19 21:11:29 ,浏览量:0

目录
    • 一、JDK5提供的原子类
    • 二、使用JDK5提供的原子类(更新基本类型)的代码示例
    • 三、使用JDK5提供的原子类(更新数组类型)的代码示例

一、JDK5提供的原子类
  • java.util.concurrent.atomic包下的类 在这里插入图片描述
二、使用JDK5提供的原子类(更新基本类型)的代码示例

1、代码

package com.xz.thread.t7;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @description: 使用JDK5提供的原子类解决多线程安全问题
 * @author: xz
 */
public class Sequeue {
	//私有变量使用JDK5提供的AtomicInteger原子类
    private AtomicInteger value=new AtomicInteger(0);

    public int getNext(){
        //获取并且自增,非原子操作都可转化为原子操作
        return value.getAndIncrement();
    }

    public static void main(String[] args) {
        Sequeue sequeue = new Sequeue();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"    "+sequeue.getNext());
                try {
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println(Thread.currentThread().getName()+"    "+sequeue.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println(Thread.currentThread().getName()+"    "+sequeue.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

2、输出结果 在这里插入图片描述

3、结论

  • 由上图第2步骤可知,使用JDK5提供的原子类在多线程环境下(更新基本类型)数据,没有产生重复值,解决了多线程安全问题。
三、使用JDK5提供的原子类(更新数组类型)的代码示例

1、代码

package com.xz.thread.t7;

import java.util.concurrent.atomic.AtomicIntegerArray;

/**
 * @description: 使用JDK5提供的原子类(更新数组类型)的代码示例
 * @author: xz
 */
public class SequeueArr {

    private int[] a= {1,3,5,7};//定义一个数组
    AtomicIntegerArray atomicIntegerArray =new AtomicIntegerArray(a);

    public  int getNext(){
        //getAndAdd(int i, int delta) 给某一个位置的值增加多少
        return atomicIntegerArray.getAndAdd(0,10);
    }
    public static void main(String[] args) {
        SequeueArr sequeueArr = new SequeueArr();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"    "+sequeueArr.getNext());
                try {
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println(Thread.currentThread().getName()+"    "+sequeueArr.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    System.out.println(Thread.currentThread().getName()+"    "+sequeueArr.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

2、输出结果 在这里插入图片描述

3、结论

  • 由上图第2步骤可知,使用JDK5提供的原子类在多线程环境下(更新数组类型)数据,没有产生重复值,解决了多线程安全问题。
关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0432s