您当前的位置: 首页 > 

Dongguo丶

暂无认证

  • 2浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

线程间通信volatile

Dongguo丶 发布时间:2021-09-10 15:20:25 ,浏览量:2

volatile

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性

从JSR-133开始(即从JDK5开始),volatile变量的写-读可以实现线程之间的通信。

volatile有一个关键的特性:保证内存可见性,即多个线程访问内存中的同一个被volatile关键字修饰的变量时,当某一个线程修改完该变量后,需要先将这个最新修改的值写回到主内存,从而保证下一个读取该变量的线程取得的就是主内存中该数据的最新值,这样就保证线程之间的透明性,便于线程通信。

package com.dongguo.sync;

/**
 * @author Dongguo
 * @date 2021/8/23 0023-21:31
 * @description: volatile实现线程通信
 */
public class ThreadDemo1 {
    private static volatile boolean flag = true;

    private static int number = 0;

    public static void main(String[] args) {
        //ThreadA+1
        new Thread(() -> {
            while (true) {
                if (flag) {
                    number++;
                    System.out.println("ThreadA+1值为:" + number);
                    flag = false;
                }
            }
        }, "ThreadA").start();
        //ThreadB-1
        new Thread(() -> {
            while (true) {
                if (!flag) {
                    number--;
                    System.out.println("ThreadB-1值为:" + number);
                    flag = true;
                }
            }
        }, "ThreadB").start();
    }
}

运行结果

image-20210910103425169

关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0385s