java并发1--volatile关键字

自动驾驶嵌入式修炼秘籍:理想L9自动驾驶域控制器拆解 阅读详情

volatile关键字:作用是使变量在多个线程间可见(final也是的)


未使用volatile关键字的代码:

public class RunThread extends Thread{
	/**
	 * volatile关键字,当变量
	 * --isRunning用来控制run()中循环的结束,这里没有加volatile的话,rt线程中的isRunning不会改变
	 *
	 *
	 * jdk5后对每一个线程加了一个内存空间,装主内存中的引用变量,所以isRuning在rt线程中依然是true,即使主线程将isRunning改为true。
	 */
	/**volatile*/
	private volatile  boolean isRunning = true;

	private void setRunning(boolean isRunning){
		this.isRunning = isRunning;
	}
	
	public void run(){
		System.out.println("进入run方法..");
		int i = 0;
		while(isRunning == true){
			//..
		}
		System.out.println("线程停止");
	}
	
	public static void main(String[] args) throws InterruptedException {
		RunThread rt = new RunThread();
		rt.start();
		Thread.sleep(1000);
		rt.setRunning(false);
		System.out.println("isRunning的值已经被设置了false");
	}
	
	
}


分析:

打印结果:一直死循环



使用volatile关键字后打印结果:rt线程会停止


FlashBootloader01-基于UDS的Flash Bootloader【架构篇】 文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端 阅读详情

相关推荐

计算机组成原理实验(已通关)-华中科技大学头歌Educoder(Logisim)

汉字国标码转区位码实验 汉字机内码获取实验 8位可控加减法电路设计 第2关 CLA182四位先行进位电路设计 第3关 4位快速加法器设计 第4关 16位快速加法器设计 第5关 32位快速加法器设计 第6关 5位无符号阵列乘法器设计 6位有符号补码阵列乘法器 乘法流水线设计 原码一位乘法器设计 偶校验编码设计 偶校验解码电路设计 16位海明编码电路设计 16位海明解码电路设计 海明编码流水传输实验 16位CRC并行编解码电路设计 CRC编码流水传输实验

紫荆鱼的博客 4万+

不同类型变量的存储位置及相对效率

目录前言不同范围类型的变量,应在哪里存储栈存储(Storage on the stack)全局或静态存储(Global or static storage)寄存器存储(Register storage)易变变量(volatile)线程本地存储(Thread-local storage)Far动态内存分配类中声明的变量 前言 如果说并行计算是常数级的效率优化,并不能改变所运行算法的时间复杂度,那么C++语言的相对效率就是在程序的众多细小的地方进行改善。可能每个微小的改变之会让程序快几个时钟周期。但是,如果这个

夜的第七章 680

三角洲行动交易行自动化脚本

DFMarketBot - 三角洲行动自动交易助手 DFMarketBot是一款专为三角洲行动游戏设计的交易行自动化工具,通过OCR识别和鼠标模拟实现自动补卡、补子弹功能。项目采用Python开发,支持Windows平台,主要功能包括: 自动检测并购买指定物品(房卡/子弹) 价格监控与智能购买(低于设定价格自动下单) 自定义购买数量与次数限制 支持窗口/无窗口两种游戏模式 使用前需安装Tesseract OCR引擎并配置游戏为1920*1080分辨率。通过JSON文件可灵活配置监控物品清单、理想价格和购买策

愤怒的阿木木的博客 3万+

将附初值的的变量定位到ROM中

Keil C51中变量和函数的绝对地址定位问题: 1. 变量绝对地址定位 1) 在定义变量时使用 at 关键字加上地址就可. e.g. unsigned char idata myvar at 0x40; 把变量 myvar 定义在 idata 的 0x40 处, 在 M

tanyjin的博客 4400

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 951

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

u012790770的博客 3617

C51提供了三种访问绝对地址的方法:

C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD  具体使用可看一看absacc.h便知 例如: rval=CBYTE[0x0002];指向程序存贮器的0002h地址  rval=XWORD   [0x00

mrwangwang的专栏 1万+

告别 SAP GUI 事务码时代:手把手教你配置 SAP Fiori Launchpad

SAP S/4HANA私有云系统安装后,Fiori Launchpad空页面问题常因多层配置未完成所致。SAP仅提供基础技术配置,实际应用启用、业务目录创建、角色授权等需实施团队完成。Fiori配置分为跨客户端层(技术目录)、客户端定制层(业务目录、空间页面)和用户个性化层三层架构。标准授权流程需依次创建业务目录、业务角色、空间页面并正确分配。SAP建议使用最新的配置工具如FLPAM和FLPCM,并采用Spaces/Pages替代已弃用的Groups概念。完整授权需六步:分配基础角色、创建业务目录、维护业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 540

Java多线程(11)——volatile详解

1 基本概括 2 主要介绍 2.1 Java内存模型(JMM) JMM(Java Memory Model)Java内存模型,是java虚拟机规范中所定义的一种内存模型。 Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。 所有的共享变量都存储于主内存。这里所说的变量指的是实例变量和类变量。不包含局部变量,因为局部变量是线程私有的,因此不存在竞争问题。每一个线程还存在自己

qq_20761351的博客 898

ROS2入门到精通—— ROS2实战专栏(实时更新)

Nav2专栏介绍

BigDavid123的博客 2372

Burpsuite系列安全渗透--自动扫描生成h5报告

第一章简述 Burpsuite是基于Java的用于web安全的工具,能够进行爬虫、代理、编码、密码爆破等任务,并支持对XSS漏洞、文件包含等漏洞的主动扫描或被动扫描。burpsuite2.0具体分为以下11个模块: Dashboard(仪表盘)——显示任务、实践日志等。 Target(目标)——显示目标目录结构的的一个功能。 Proxy(代理)——拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。 Intruder(...

魔都虫师的博客 2890

java volatile数组_Java并发编程1——volatile关键字解析

阅读[Java并发编程:volatile关键字解析](http://www.importnew.com/18126.html)一文后有感。# 1.并发编程中的三个概念- **原子性**即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。- **可见性**可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值- **有序性*...

weixin_30764045的博客 624

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

【java并发】(1)深入理解volatile关键字

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前...

adb96102的博客 80

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java并发编程:volatile关键字解析(1)

参考:http://www.cnblogs.com/dolphin0520/p/3920373.htmlJava并发编程:volatile关键字解析   volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面...

weixin_33979203的博客 70

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java volatile 的作用;双重检查锁中的 volatile 关键字

引入 最近在学习设计模式的时候《HeadFirst设计模式》,学到了熟悉的单例模式。这个模式本应该是最熟悉的,毕竟初学时应用懒汉模式创建数据库连接。 书中提到的单例代码 可以看到图中有 volatile 修饰的单例对象,他引起了我的注意,而下方的注释并没有解决我的疑问。因为之前使用单例模式的时候并没有添加这个关键字,似乎也能满足单例需求,难道说只是表面上满足了需求,而问题并没有暴露出来吗? 查资料 JAVA中volatile介绍 Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂) 双

  377

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java并发之并发关键字

任意一个对象都拥有自己的 Monitor,当这个对象由同步块或者同步方法调用时, 执行方法的线程必须先获取该对象的 Monitor 才能进入同步块和同步方法, 如果没有获取到 Monitor 的线程将会被阻塞在同步块和同步方法的入口处,进入到 BLOCKED 状态。轻量级锁是由偏向锁升级而来,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁。当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。

通往IT大道的专栏 1151

volatile关键字解析

volatile关键字能够保证对其修饰的变量进行 读取 或 写入 操作时是原子操作,且保证对其修饰的变量进行写入操作是具有先行发生原则的(即对其进行写入操作能够使得其它对该变量的读取操作读取到的变量值都是最新的),但是volatile并不能保证其它操作也是原子操作,仅仅是保证读取 写入操作而已。注意这个地方,很容易忽视这个定义导致出现异常。下面的代码中开了100个线程,每个线程都对n进行连续10次...

E_N_T_J的博客 222

Java中volatile关键字多线程序并发问题说明测试示例代码

本文主要介绍Java使用volatile关键字变量,在多线程中并发中示例代码,出现在并发情况下,这个a == 1 && a == 2 && a == 3是true。 原文地址:Java中volatile关键字多线程序并发问题说明测试示例代码 ...

weixin_42098295的博客 105

Java高并发学习笔记(四):volatile关键字

1 来源 来源:《Java高并发编程详解 多线程与架构设计》,汪文君著 章节:第十二、十三章 本文是两章的笔记整理。 2 CPU缓存 2.1 缓存模型 计算机中的所有运算操作都是由CPU完成的,CPU指令执行过程需要涉及数据读取和写入操作,但是CPU只能访问处于内存中的数据,而内存的速度和CPU的速度是远远不对等的,因此就出现了缓存模型,也就是在CPU和内存之间加入了缓存层。一般现代的CPU缓存层分为三级,分别叫L1缓存、L2缓存和L3缓存,简略图如下: L1缓存:三级缓存中访问速度最快,但是容量最

氷泠 358

Java并发编程-synchronized、volatile、AQS解析

JDK1.6 之前,synchronized 是一个重量级锁相比于JUC的锁显得非常笨重,存在性能问题JDK1.6 及之后,Java 对 synchronized 进行的了一系列优化,性能与 JUC 的锁不相上下synchronized 可以保证并发程序的synchronized 可以修饰方法和代码块。

qq_45260619的博客 1380

volatile关键字

volatile关键字 自java 1.5版本起,volatile关键字所扮演的作用越来越重要。该关键字在并发包(JUC)中使用得非常广泛,因此掌握volatile对进一步提升技术大有裨益。所有的原子数据类型都以此作为修饰,相比synchronized关键字,volatile被称为"轻量级锁",能实现部分synchronized关键字的语义。 volatile关键字的两层含义: 1、保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2、禁止进行指令

weixin_44502548的博客 286

关键字volatile

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 Java语言规范中指出:为了获得最佳速度,允许线程保...

cichaojiao4477的博客 167

java中的volatile关键字的作用

大家知道我们写的代码(尤其是多线程代码),由于编译器优化,在实际执行的时候可能与我们编写的顺序不同。所以,在jdk1.5版本前,双重检查锁形式的单例模式是无法保证线程安全的。因此,下面的单例模式的代码,在JDK1.5之前是不能保证线程安全的。可见性指的是在一个线程中对该变量的修改会马上由工作内存(WorkMemory)写回主内存(MainMemory),所以会马上反应在其它线程的读取操作中。顺便一提,工作内存和主内存可以近似理解为实际电脑中的高速缓存和主存,工作内存是线程独享的,主存是线程共享的。.....

UrasakiNakajima的博客 3179

线程通信方式1:通过 volatile 关键字实现

多个线程在并发执行的时候,他们在CPU中是随机切换执行的,这个时候我们想多个线程一起来完成一件任务,这个时候我们就需要线程之间的通信了,多个线程一起来完成一个任务。需求:两个线程操作一个共享变量,每个线程交替执行,对变量执行+1操作。

qq_29216579的博客 163

volatile 关键字笔记

volatile 关键字主要是让变量在多个线程之间共享, 其它线程改了当前变量,当前线程可以马上感知,以前是通过给变量加锁实现,但是变量加锁会导致等待,不理想 变量如果被 volatile 修饰,则当变量改变时强制线程执行引擎去主内存里去读取, 如果不加 volatile ,每个线程之间使用的是变量的副本, 主要是由于JDK1.5做出的优化,避免每次取变量都去主内存取,消耗性能 ...

啊苏哥哥好的博客 164
上一篇: Ubuntu16.4系统中xmind8的一些bug
下一篇: redis保存失败(save (error) ERR)+redis关闭失败:Failed opening the RDB file dump.rdb XXX for saving: Permissio
farYang
博客等级 码龄11年 36粉丝 76原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值