7.volatile关键字
2024-08-29 20:56:34
volatile:一个线程修改了某一个共享变量的值,其他线程也是否能够立即知道这个修改的
1.主要是让该“变量”在多个线程中可见,在java中每一个线程都有一块自己的工作区,其中就存放着所有线程“共享变量”的变量值的拷贝、复制。
2.当线程执行时,他在自己的工作内存区操作的这些变量,为了存取这些变量,一个线程通常会先去获取锁,并去除它的内存工作区,把这个共享变量从所有线程的
的工作区拿到他自己的工作内存区,当自己操作完成后,解锁并把该变量的值重新“刷新写入”到共享内存中。
3.线程的操作:使用、赋值、装载、存储、锁定、解锁
4.主内存可以执行:read、wrlte、lock、unlock 原子性操作
5.强制线程去主内存中(共享变量)去读取变量,而不是去此案的工作内存区取出、从而实现了多个线程的变量可见性,满足线程安全。
package demo1;
/**
* Created by liudan on 2017/7/2.
*/
public class MyThread_volatile extends Thread {
private volatile boolean isRunning = true;
public void setRunning(boolean running) {
isRunning = running;
}
@Override
public void run() {
System.err.println("进入 run 方法");
while (isRunning==true){
/* System.err.println("run 方法操作中.................");*/
}
System.err.println("停止run 方法");
}
public static void main(String[] args) throws InterruptedException {
MyThread_volatile thread_volatile = new MyThread_volatile();
thread_volatile.start();
Thread.sleep(3000);
thread_volatile.setRunning(false);
System.err.println("setRunning 方法");
Thread.sleep(1000);
System.err.println("结束:"+thread_volatile.isRunning);
}
- }
- 输出:
- 进入 run 方法
setRunning 方法
停止run 方法
结束:false
最新文章
- 网络问卷调查js实现代码
- Ignite安装配置——上篇
- webstorm 10 出现不能run cordova项目
- 快销品 车销批发管理手持终端PDA系统 打印开单 入库 库存 盘点多功能一体
- 几种server模型
- Poj OpenJudge 百练 1860 Currency Exchang
- JDBC连接SQL server与ADO.NET连接Sql Server对比
- ARMv8 Linux内核head.S源码分析
- cocos2d-x -- 渠道SDK【棱镜】接入(1)
- Struts2(result 流 )下载
- shell编程其实真的很简单(四)
- Java 内部类的意义及应用
- CentOS6系列系统启动常见故障排查与解决方法
- 如何在eclipse中快速debug到想要的参数条件场景下
- Android的Device File Explorer刷新文件
- php循环删除文件夹和目录
- CF1010D Mars rover [位运算,DP]
- 80端口被系统进程PID-4占用解决办法
- Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)
- day 93 Django学习之django自带的contentType表
热门文章
- Vugen 和controller 中的run-time setting区别
- ffmpeg 编译graph2dot
- ref:一种新的攻击方法——Java Web表达式注入
- [Codeforces50C]Happy Farm 5 凸包
- [BZOJ3676][APIO2014]回文串(Manacher+SAM)
- PHP链接sqlserver出现中文乱码
- Codeforces Beta Round #10 D. LCIS 动态规划
- 2015 UESTC 数据结构专题C题 秋实大哥与快餐店 字典树
- 【弱省胡策】Round #0 Flower Dance DP
- Swift 闭包反向传值