volatile关键字

volatile 与 synchronized 比较

1.volatile 关键字是线程同步的轻量级实现,所以volatile性能肯定 比 synchronized 要好; volatile 只能修饰变量,而 synchronized 可以修饰方法,代码块. 随着 JDK 新版本的发布,synchronized 的执行效率也 有较大的提升,在开发中使用 sychronized 的比率还是很大的.

2.多线程访问volatile变量不会发生阻塞,而 synchronized 可能会阻塞

3.volatile能保证数据的可见性,但是不能保证原子性;而synchronized可以保证原子性,也可以保证可见性

4.关键字volatile解决的是变量在多个线程之间的可见性;

public class Test02 {

    public static void main(String[] args) throws InterruptedException {
        PrintString printString =new PrintString();

        new Thread(new Runnable() {
            @Override
            public void run() {
                printString.printStringMethod();
            }
        }).start();

        Thread.sleep(1000);

        System.out.println("在main线程中修改打印标志");
        printString.setContinuePrint(false);


    }








    static class PrintString{
        //使用volatile关键字修饰PrintString对象的打印标志

        //volatile的作用可以强制线程从公共内存中读取变量的值

        private volatile boolean continuePrint = true;


        public  PrintString setContinuePrint(boolean continuePrint){
            this.continuePrint = continuePrint;
            return this;
        }

        public void printStringMethod(){
              System.out.println(Thread.currentThread().getName()+"开始...");
              while (continuePrint){

              }

              System.out.println(Thread.currentThread().getName()+"结束...");

        }





    }







}

image-20210819133533465

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值