Java并发编程相关基础知识

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南) 本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。 阅读详情

并发是指同一个时间段内多个任务同时都在执行

并行是说在单位时间内多个任务同时在执行

线程的工作内存展示

 

 

Java中的synchronized关键字

synchronized块是Java提供的一种原子性内置锁,java中每个对象都可以把他当做一个同步锁来使用。内置锁是排他锁,当一个线程获取这个锁后,其他线程必须等待该线程释放锁后才能获取锁。

进入synchronized块的内存语义是把在synchronized块中使用到的变量从线程的工作内存中清除,这样在synchronized块内使用到该变量就不会送线程的工作内存中获取,而是直接从主内存中获取,退出synchronized块的内存语义是把在synchronized块内对共享变量的修改刷新到主内存。

synchronized关键字会引起线程上下文切换并带来线程调度开销。

 

Java中的volatile关键字

当一个变量被声明为volatile时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存。该关键字可以确保对一个变量的更新对其他线程马上可见。其他线程读取该共享变量时会从主内存重新获取最新值。

当写入变量值不依赖变量当前值时,可以使用volatile关键字,如果依赖当前值,需要获取-计算-写入三步操作,这三步操作不是原子性的,因此volatile不保证原子性。

 

Java中的原子性操作

原子性操作是指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行一部分的情况。

使用synchronized关键字可以实现线程安全性,即内存可见性和原子性。

 

Java中的CAS操作

CAS即Compare and Swap,是JDK提供的非阻塞原子性操作,通过硬件保证比较-更新操作的原子性。

 

Unsafe类的重要方法

JDK的rt.jar包中的方法Unsafe类提供了硬件级别的原子性操作。

 

 

锁的概述

悲观锁

悲观锁对数据被外界修改持保守态度,认为数据很容易会被其他线程修改,所以在数据被处理前对数据加锁,并在整个数据处理过程中,使数据处于锁定状态。

乐观锁

乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。

公平锁与非公平锁

这两类划分依据是根据线程获取锁的抢占机制,公平锁表示线程获取锁的顺序是按照线程请求锁的时间早晚决定,先来先得,非公平锁则是在运行时闯入就是先来不一定先得。

独占锁与共享锁

根据锁只能被单个线程持有还是能被多个线程共同持有分为独占锁和共享锁。

独占锁:一种悲观锁,保证任何时候只有一个线程能得到锁,每次访问资源都先加上互斥锁,同一时间只允许一个线程读取数据。

共享锁:一种乐观锁,允许多个线程同时进行读操作。

可重入锁:如果一个线程再次获取它自己已经获取的锁时是否会被阻塞,如果不被阻塞,就是可重入的。(synchronized的锁时可重入锁)

自旋锁:在当前线程获取锁时,如果发现锁已经被其他线程占用,它不马上阻塞自己,在不放弃CPU使用权的情况下,多次尝试获取,很可能在后面几次尝试中其他线程已经释放了锁。如果尝试指定次数后仍没有获得锁,则当前线程才会被阻塞挂起。是一种利用CPU时间换取线程阻塞与调度开销的方式。

 

伪共享

为了解决计算机系统内主内存和CPU之间的运行速度差,CPU和主内存之间有一级或多级高速缓冲器,成为Cache,或者CPU Cache。

当CPU访问某个变量时,首先会去看CPU Cache内是否有该变量,如果有则从中获取,如果没有就去主内存获取该变量,然后把该变量所在内存区域的一个Cache行大小的内存复制到Cache。

在Cache内部按行存储Cache行是Cache与主内存进行数据交换的单位。由于Cache行中存的是内存块,不是单个变量,可能会把多个变量存放到一个Cache行中,当多个线程同时修改一个缓存行里面多个变量时,由于同时只能有一个线程操作缓存行,所以相比每个变量放到一个缓存行,性能会有所下降。

在单线程下顺序修改一个缓存行中的变量会充分利用程序运行的局部性原则,从而加速程序运行,多线程下并发修改一个缓存行中的多个变量会竞争缓存行,从而降低程序运行性能。

如何避免伪共享

JDK1.8之前一般通过字节填充来避免该问题,创建一个变量时使用填充字段填充该变量所在缓存行。

例如:

public final static class FilledLong{

public volatile long value=0L;

public long p1,p2,p3,p4,p5,p6;

}

假设缓存行为64字节,在FieldLong中填充了6个long类型的变量,加上value本身8字节,共56字节,类对象字节码的对象头占用8字节,所以实际上一个对象占有64字节。

JDK8提供了一个sun.misc.Contented注解来解决伪共享问题。

修饰类:

@sun.misc.Contented

public final static class FilledLong{

public volatile long value = 0L;

}

修饰变量:

@sun.misc.Contented("tlr")

long threadLocalRandomSeed;

 

Android 13.0 framework默认沉浸式导航栏功能实现 ​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​ 阅读详情

相关推荐

C语言实现AES加解密

C语言实现AES加解密 #include<stdio.h> #include<string.h> #include<time.h> #include<windows.h> #define Nb 4 //数据块行数 #define Nk 4 //密码块行数 #define Nr 10 //轮加密次数 unsigned char RoundKey[4*Nb*(Nr+1)]; //轮密钥 unsigned char Key[17];

qq_44310495的博客 8890

Java 并发编程 -全程干货无废话版

覆盖 Java 并发编程 90% 知识

m0_47163297的博客 1448

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 468

Java中各种锁的相关知识点(含代码)

公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解,请手写一个自旋锁 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象 并发包中ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或非公平锁,默认是非公平锁,非公平锁的优点在于吞吐量比公平锁大。对于Synchronized而言,也是一种

qq_57469718的博客 571

H3C模拟器HCL防火墙路由模式主备配置实验

摘要:本文详细介绍了网络拓扑规划与设备配置方案。运营商仅提供一个接口地址,通过虚IP技术实现双防火墙高可用部署:主备防火墙分别配置10.20.10.1/29和10.20.10.2/29作为实际上联地址,共享10.10.10.2/24虚IP;下联配置172.168.10.0/24网段,核心交换机配置VLAN接口及192.168.10.1、192.168.20.1两个下联接口。文章包含运营商路由器、防火墙(HA配置、VVRP设置)和核心交换机的具体命令行配置步骤,并强调需进行主备切换验证。整个方案实现了单运营商

LQ的博客 1122

微信公众号 - 解决报错 “err_msg“:“system:access_denied“,微信环境浏览器真机使用微信支付、微信授权登录、分享朋友圈转发好友报错system:access_denied

微信公众号,微信网页,手机h5网页,微信报错,system:access_denied,微信支付,提示报错,微信登录授权报错,微信朋友圈分享,微信转发,WeixinJSBridge,微信环境下,微信内置浏览器,微信公众号项目报错system:access_denied,如何解决,invoke(),API调用后出现报错,微信内部H5 WeixinJSBridge.invoke system:access_denied,使用微信jssdk时报access_denied错误,还是报错,真机运行,真机调试api返回

🏆 前端领域优质创作者 1万+

非常详细和清晰的java并发编程知识

前言:要想理解多线程并发的知识,必须要理解下面几个关键词: 线程的工作内存(高速缓存区)、内存(主存)、可见、有序、原子性。 线程对变量的操作:1 线程读取变量到自己的工作内存中 2 修改 3 将修改后的值写入到主存中 分析:在1到2 的过程中和2到3的过程中,可能会发生阻塞,此时变量的值已经复制到线程的工作内存中了,一旦发生阻塞,该线程将停止工作,而其他线程会从主存中读取数据,重复...

统木木的博客 585

输入文件(Example-1.inp)参数解读与获取方法

弹性参数:优先使用默认值(泊松比 0.25、杨氏模量 8×10⁵ bars),或参考区域地质 / 地球物理研究。断层参数:从地震矩反演、GPS 位移反演、地质图 / 震源机制获取(核心参数,需确保准确性)。网格 / 图形参数:根据研究区范围和输出需求调整(步长 / 放大系数等)。

2301_79258000的博客 81

JAVA锁知识梳理

锁锁锁锁锁

Studder的博客 584

DeepSeek Harness 工程实践与高级特性:从测试到安全的完整指南

AI Agent 能执行命令、读写文件、自主决策,能力越强风险越大——删文件、泄密钥、死循环、竞态条件随时可能发生。本文是 DeepSeek Harness 系列第三篇,深入剖析其工程实践与高级特性:从单元测试到真实 API 冒烟测试的分层策略,拒绝 Mock 依赖、坚持"验证世界而非自我报告";从正交结果、规范化契约到 Dispose 静止的防御式编程铁律;以及跨平台多层进程沙箱、文件系统版本守卫、fail-closed 审批机制、模型编写的工作流引擎与上下文压缩等高级能力。

program哲学 207

SAP-ABAP:SAP IDOC 全面学习指南

SAP-ABAP:SAP IDOC 全面学习指南

baidu_35680696的博客 1616

32个java面试考点:MySQL调优与最佳实践

知识点汇总 常用SQL语句 数据类型 存储引擎 MyISAM InnoDB ToKuDB: 锁 表锁 行级锁 共享锁 排他锁:就是写锁 四、索引 需要额外的磁盘空间来保存索引,更新删除会增加额外的开销,适合用在读多写少的场景 4.1 分类 唯一索引:值是惟一的,允许存在null值,用来保证数据的唯一性 主键索引:特殊的唯一索引,但不允许...

Jerry的博客 764

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 并发编程之美-线程相关的基础知识

借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了;相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。海风教育退费 海风教育在线辅导0元一对一试听课等你来领取,领取课程方法: 1、私信留下您的手机号和姓名,需要补习的科目。 2、也可以在海风教育官网留下您的手机号领取 https:...

weixin_43932460的博客 123

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java 并发编程之美:线程相关的基础知识

借用 Java 并发编程实践中的话;编写正确的程序并不容易,而编写正常的并发程序就更难了;相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的。 并发编程相比 Java 中其他知识点学习起来门槛相对较高,学习起来比较费劲,从而导致很多人望而却步;而无论是职场面试和高并发高流量的系统的实现却都还离不开并发编程,从而导致能够真...

GitChat 1687

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JUC并发编程-高级篇

JUC并发编程-高级篇:1. JUC并发编程介绍、2. 线程基础知识

LiuYQi的博客 911

Java并发编程:学习攻略如何才能学好并发编程?

学习Java并发编程是一个逐步积累知识和实践经验的过程。

qq_33240556的博客 422

Java并发编程实战 -- 读书笔记

01 02

Syntactic Sugar 364

Java并发编程-基础知识

一、基础知识 并发编程有什么缺点 并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如**:内存泄漏、上下文切换、线程安全、死锁**等问题。 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全? 并发编程三要素(线程的安全性问题体现在): 原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。 可见性:一个线程对共享变量的修改,另一个线程能够立刻看

232

java并发编程实践相关资料下载

并发编程实践相关资料下载,介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

tonyliult的博客 403

并发编程学习【基础篇】

由浅入深地学习JUC,一起每天进步一点!

qq_44654974的博客 872

Java并发编程面试题: 基础知识(线程状态、调度、方法)

收集大量Java经典面试题目,内容涵盖了包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 等知识点。适合准备Java面试的读者参考和复习。

m0_46013789的博客 1086

Java并发编程基础知识点

目录Java并发编程基础知识点1、线程,进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点:2、线程的状态Java线程的状态:Java线程不同状态之间的切换图示3、Java程序中如何创建线程?①、继承Thread类②、实现Runnable接口③、使用Lambda表达式④、使用Callable和Fut...

weixin_35496861的博客 157

Java并发编程

并发编程与java

vip_member888的博客 1815

java j.u.c 并发编程

收藏: http://blog.youkuaiyun.com/chmask/article/details/2631485(设计模式) http://www.open-open.com/solution/view/1320130857046(Java 泛型集合工具类) http://cmsblogs.com/(java j.u.c  并发编程) http://cmsblog

liuxiangke0210的专栏 529

Java并发编程基础

添加链接描述

Code changes the world! 172
上一篇: Java并发编程基础知识
下一篇: 情感计算介绍
时间刻沙
博客等级 码龄10年 39粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值