线程安全——Volatile&原子性、核心

Volatile&原子性、核心概述

Volatile关键字核心概念与应用							
Volatile关键字内存模型分析							
Volatile关键字happens-before与内存屏障概念、重排序			
Atomic类关键字									
Atomic类实战应用爬坑手记	 		
JDK Unsafe类使用与CAS原子特性
Volatile概念:Volatile关键字的主要作用是使变量在多个线程间可见。

作用: 在多线程间可以进行变量的变更,使得线程间进行数据的共享可见 
阻止指令重排序,happens-before
package com.bfxy.thread.core.cas;

public class UseVolatile extends Thread {

	private volatile boolean isRunning = true;
	
	
	private void setRunning(boolean isRunning) {
		this.isRunning = isRunning;
	}
	
	public void run(){
		System.err.println("进入run方法...");
		while(isRunning == true) {
			//....
		}
		System.err.println("线程停止!");
	}
	
	public static void main(String[] args) throws InterruptedException {
		
		UseVolatile uv = new UseVolatile();
		uv.start();
		
		Thread.sleep(2000);
		//修改isRunning = false
		uv.setRunning(false);
		
		System.err.println("isRunning的值已经被设置成了false!");
		
	}
	
	
}

如果不加关键字volatile :只是对对象中参数进行设置,对run方法逻辑没有影响

用volatile 修饰变量,通过改变变量控制线程是否结束;通过volatile修饰指定变量对run方法有影响

volatile 执行原理:

内存模型:

    一个线程可以执行的操作有使用(use)、赋值(assign)、装载(load)、存储(store)、
锁定(lock)、解锁(unlock)。
而主内存可以执行的操作有读(read)、写(write)、锁定(lock)、解锁(unlock),每
个操作都是原子的。
    volatile的作用就是强制线程到主内存(共享内存)里去读取变量,而不去线程工作内存区里
去读取,从而实现了多个线程间的变量可见。也就是满足线程安全的可见性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

择业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值