Volatile用法

Java语言提供了一种稍弱的关键词,即Volatile变量,用来确保将变量的更新操作通知到其它线程。

仅当Volatile变量能简化代码的实现以及对同步的策略的验证时,才应该使用它们。如果在验证正确性时需要对可见性进行复杂的判断,那么就不要使用Volatile变量。
正确的使用方式包括:确保它们自身的状态的可见性,确保它们所引用的状态的可见性,以及表示一些重要的程序的生命周期事件的发生(例如:初始化或关闭)

加锁机制既可以确保可见性又可以保证原子性,而volatile变量只能确保可见性。

package practice3_1_4;

/**
 * @Author ghz 【351150710@qq.com】
 * practice3_1_4
 * @Date 2018/6/8 下午11:42
 */
public class VolatileDemo {

    /**
     * volatile 用来将变量的更新操作及时通知到其它的线程
     */
    public volatile  boolean flag = false;

    void run(){
        new ThreadOne().start();
        new ThreadTwo().start();
    }
    public static void main(String[] args) {
        System.out.println("test");


        VolatileDemo demo = new VolatileDemo();
        demo.run();
    }



    class ThreadOne extends Thread{
        @Override
        public void run() {
            while (!flag){
                System.out.println("ThreadOne running ...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    class ThreadTwo extends  Thread {
        @Override
        public void run() {
            try {
                Thread.sleep(9000);
                //终止线程一继续执行
                flag = true;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值