Java并发概念汇总

4.2并发常用技术点汇总 并发常用技术点汇总 开篇前 上篇对多线程设计模式做了简单讲解,本篇我们将从:JDK多任务执行框架、JDK并发数据结构、JDK并发控制方法、锁的性能和优化、无锁的并行计算、协程等6方面汇总并发编程技术点,让小伙伴学习有个总体脉络。 学习小提示:并发编程在某些高并发场景下能显著提升程序性能,本章带大家了解下并发编程方面的知识,但本小节涵盖知识点比较多,学习过程中遇到不明白知识点要及时讨论汇总。 一、JDK多任务执行框架 为了给并行程序开发提供更好的支持,Java提供了Thread类、Runnable接口 阅读详情

看了《Java编程思想 第4版》并发这一章,觉得有必要整理一下其中的概念。

并发

为什么要并发? 比如因为IO操作遇到了阻塞,CPU可以转去执行其他线程,这时并发的优点就显示出来了:更高效的利用CPU,提高程序的响应速度。

Java的线程机制是抢占式的,会为每个线程分配时间片。

线程中断与上下文切换

并发编程 - 多线程的代价及上下文切换 
上下文切换与多处理器

Java本身还有另外一个“线程中断”

详细分析Java中断机制

基本的线程机制

使用Runnable和Thread创建线程:

Defining and Starting a Thread 
“implements Runnable” vs. “extends Thread”

使用执行器Executor执行线程:

并发新特性—Executor框架与线程池(含代码) 
Java线程(六):线程池 
Interface Executor

让线程中的任务返回值:Callable

Java线程(七):Callable和Future 
Java Callable Future Example

休眠sleep()、让步yield()

休眠(sleep)和让步(yield)会导致线程阻塞,CPU转而执行其他线程。对调用yield时,是在建议具有相同优先级的其他线程运行。

java之yield(),sleep(),wait()区别详解

线程优先级、后台线程

关于Java的Daemon线程的理解 
JAVA并发编程——守护线程(Daemon Thread) 
Java多线程系列--“基础篇”10之 线程优先级和守护线程 
java 线程的优先级Priority

join()

简谈Java的join()方法 
Java多线程中join方法的理解

捕获线程的异常

JAVA 线程中的异常捕获

共享受限资源

Java线程安全和非线程安全

synchronized

Java线程(二):线程同步synchronized和volatile 
What does 'synchronized' mean?

重入锁ReentrantLock

Java线程(八):锁对象Lock-同步问题更完美的处理方式 
Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制

锁

java锁的种类以及辨析(一):自旋锁 
Java锁的种类以及辨析(二):自旋锁的其他种类 
Java锁的种类以及辨析(三):阻塞锁 
Java锁的种类以及辨析(四):可重入锁

Volatile变量

Java 理论与实践: 正确使用 Volatile 变量 
聊聊并发(一)——深入分析Volatile的实现原理

CAS

JAVA CAS原理深度分析

原子类

Java 理论与实践: 流行的原子 
Java多线程(二)之Atomic:原子变量与原子类

临界区(critical section)

竞态条件与临界区

线程本地存储ThreadLocal

Java线程(篇外篇):线程本地变量ThreadLocal 
彻底理解ThreadLocal 
Class ThreadLocal 
Java ThreadLocal 
When and how should I use a ThreadLocal variable?

终结任务

线程状态

一张图让你看懂JAVA线程间的状态转换 
Life Cycle of Thread – Understanding Thread States in Java 
Java 6 Thread States and Life Cycle

中断线程

详细分析Java中断机制 
What does java.lang.Thread.interrupt() do?

如何停止线程

stop()方法已经被废弃了。

如何停止一个正在运行的java线程 
How to stop a java thread gracefully?

线程协作

wait()、notify()、notifyAll()

阻塞是进程在等待某种资源,但是不能马上得到,必须等待别的进程释放资源才能继续,属于被动无法得到时间片,内核就切换其它进程运行 
休眠一般为主动式的放弃一段CPU时间。 
挂起是运行时间片到了,内核要调度其它进程运行,被动式的失去CPU。(挂起可以被别的进程给抢占导致挂起,也可以自己主动挂起自己。)

wait()会在等待时将当前任务挂起,等到notify()/notifyAll()发生时,任务才被唤醒。

调用sleep()、yield()时不会释放锁;调用wait()时线程被挂起,对象上的锁也会被释放。

wait()、notify()、notifyAll()属于类Object,不属于Thread。

只能在同步控制方法或者同步控制块(synchronized)中调用wait()、notify()、notifyAll()。而sleep()、yield()可以在非同步控制方法里使用。

notifyAll()比notify()更安全一些。使用notify()时,众多等待同一个锁的任务中只有一个会被唤醒。

Java Thread wait, notify and notifyAll Example

Lock和Condition

Java线程(九):Condition-线程通信更高效的方式

死锁

哲学家就餐问题 
一个 Linux 上分析死锁的简单方法、死锁的4个必要条件 
什么是死锁,死锁的四个必要条件以及处理死锁的策略 
如何避免死锁

类库中的其他构件

CountDownLatch

CountDownLatch,闭锁。

首先给该对象一个初始计数值,每个在该该对象上调用await()的任务会阻塞。当计数值到0时,所有因为await()而阻塞的任务都继续执行。

Java CountDownLatch应用 
CountDownLatch 
Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例

CyclicBarrier

CyclicBarrier,关卡,栅栏。

CountDownLatch和CyclicBarrier的区别 (01) CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程相互等待。 (02) CountDownLatch的计数器无法被重置;CyclicBarrier的计数器可以被重置后使用,因此它被称为是循环的barrier。

Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 
CyclicBarrier

BlockingQueue

Interface BlockingQueue 
聊聊并发(七)——Java中的阻塞队列

DelayQueue

Examples of DelayQueue in Java 
精巧好用的DelayQueue

Timer和TimerTask

这两个在java.util这个包下面。

Timer和TimerTask可以做为实现线程的第三种方式,前两种方式分别是继承自Thread类和实现Runnable接口。

Java线程(五):Timer和TimerTask

ScheduledThreadPoolExecutor

Java ScheduledThreadPoolExecutor延迟或周期性执行任务 
Class ScheduledThreadPoolExecutor

信号量Semaphore

Java 信号量 Semaphore 介绍 
Java Concurrency Tutorial – Semaphores

Exchanger

用于两个线程之间交换数据。

Java线程之Exchanger

性能调优

使用Lock通常比sychronized高效,sychronized的开销看起来变化范围很大,Lock相对一致。synchronized产生的代码,与Lock所需要的“加锁-try/finally-解锁”相比,可读性更高。

CopyOnWriteArrayList、CopyOnWriteArraySet

在该类的对象中,写入将导致创建整个底层数组的副本,而原数组保留在原地,使得复制的数组在被修改时,读取操作可以安全的执行。当对副本的修改完成时,会发生一个原子性的操作:用副本替换源数组,使得新的读取操作可以看到这个新的修改。

Class CopyOnWriteArrayList 
Java copy-on-write collections 
Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet

ConcurrentHashMap、ConcurrentLinkedQueue

聊聊并发(四)——深入分析ConcurrentHashMap 
聊聊并发(六)——ConcurrentLinkedQueue的实现原理分析 
Class ConcurrentHashMap 
Class ConcurrentLinkedQueue

乐观锁

悲观锁与乐观锁 
乐观并发控制 
Concurrency control 
Optimistic concurrency control

读写锁ReadWriteLock

适合读多写少的场景。

Java中的读/写锁 
Java ReadWriteLock Example 
ReadWriteLock

生产者消费者问题

Java线程(三):线程协作-生产者/消费者问题

其他

Java并发的四种风味:Thread、Executor、ForkJoin和Actor 
Java Thread and Multithreading Tutorial 
JAVA 多线程和并发基础面试问答 
Java Multi-Threading and Concurrency Interview Questions with Answers 
Monitor (synchronization) 聊聊并发

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南 本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。 阅读详情

相关推荐

Workbench中直接调用ICEM CFD进行网格划分

自从ANSYS 12.0之后,ICEM CFD就从Workbench中被分离出去,作为一个独立的程序使用了。取而代之的是Meshing模块。 在Meshing的属性节点菜单中右键点击Mesh,选择Insert > Method,插入方法。 选择需要划分网格的几何体,点击apply。此时Geometry显示为1 Body。 设置Method为MultiZone,如果不设置成这个的话,找不到进入ICEM CFD的入口。如果要划分四面体,可以在Mapped Mesh Type中选择其他类型。

Yan的博客 6513

【并发编程】一:java中的并发基础概念

目录前言happens-before原则MESA管程模型结束语 前言 今天聊聊java中的并发的理论知识。这是后面我们分析JUC源码的理论基础。 happens-before原则 原子性,有序性,可见性是并发问题的源头。 CPU 增加了缓存,以均衡与内存的速度差异;却导致了程序的可见性问题! 操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异;却导致了原子性问题 编译程序优化指令执行次序,使得缓存能够得到更加合理地利用;却导致了有序性问题 所以总结起来就是 cpu缓存

xiaomujiang_dafangzi的博客 356

TX 的 LOL(Local Oscillator Leakage,本振泄露)

项目内容LOL 是什么本振残留在 TX 输出中心频率上的杂散主要原因IQ 失衡、硬件不完美、零中频架构影响杂散、干扰、性能劣化、安全问题解决方法初始化校准 + 跟踪校准(AD9371 支持)检测手段频谱仪、回环检测、ADC ILA 抓取。

weixin_41230430的博客 2048

Java中并发和并行的概念

并发和并行既有相似又有区别(微观时间角度) 并发:指两个或者多个事件在同一时间段内发生并行:指两个或多个事件在同一时间点发生 在操作系统中,当有多个程序运行时,并发性是指在一段时间内宏观上有多个程序在同时运行 (宏观:从用户体验的角度即边玩游戏边听歌),但在单核系统中,每一时刻却仅有一个程序执行, 这就是CPU中时间片的概念,可以想象CPU把运行的一秒钟分成十份,计算机中所有程序...

weixin_30753873的博客 332

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 323

computer planetary——全球生物多样性信息机构 (GBIF)

正如npartitions所表明的,这个Parquet数据集是由许多单独的parquet文件组成的。(GBIF) 是一个由世界各国政府资助的国际网络和数据基础设施,提供记录物种发生的全球数据。重新处理数据的原因有多种,包括主干分类的更改,因此该日期不一定是发生记录最后更改的日期。GBIF 发生数据集结合了来自广泛来源的数据,包括来自自然历史博物馆的标本相关数据、来自公民科学网络的观察和自动环境调查。为了了解最常观察到的物种,我们将对数据集进行分组,并获得每个物种的计数。大多数字段名称对应于。

此星光明博客 1636

Java并发(1)-基础概念

这是将是一系列关于Java并发基础知识的文章。事实上,主要是《实战Java高并发程序设计》的读书笔记和网络资料以及对它们的整理。 相关概念 1.同步Synchronous和异步Asynchronous 同步和异步通常是用来形容一次方法调用。 所谓同步,就是在发出一个”调用”时,在没有得到结果之前,该”调用”就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由”调用者”主动等

331

glibc: GLIBC_2.28‘ not found

这个时候,应该怎么解决,因为当前运行的机器是低版本,而程序是高版本,解决方法,或者是将程序降级,或者将当前系统升级。在一个glibc的接口版本是GLIBC_2.25的lab上,运行不了在2.28上编译的程序。看哪一个方便,但是不能通过 临时复制libc.so 文件来解决,因为会遇到下面的错误。所以如果是简单解决就是按照低版本的应用程序,来适配当前系统的glibc版本。比如下面的程序运行提示。

mzhan017的博客 2406

java并发的概念

1.并发的概念: 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。 2.并行的概念: 指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。 区别: 并发和并行的区别就很明显了。它们虽然都说是...

qq_43382364的博客 790

《干货满满!AI 应用架构师打造 AI 驱动生产计划的实战技巧》

生产计划是制造企业的“大脑”——它决定了买什么物料、产多少产品、用什么设备、什么时候交货,直接影响企业的成本、效率和客户满意度。需求预测靠经验,误差常超20%;排产依赖Excel,调整一次要3天;供应链协同靠邮件,物料延迟导致停产屡见不鲜。作为AI应用架构师,我们的任务是用AI重新“激活”这个“大脑”——用数据驱动的预测替代经验判断,用智能优化替代人工排产,用实时协同替代被动响应。本文结合3个制造业实战案例5段可运行代码2个数字孪生模型,从架构设计→核心模块实现→落地踩坑。

移动开发前沿的博客 1083

基于Python的二手奢侈品电商平台商品保值率数据爬取与分析

本文旨在探讨如何利用Python网络爬虫技术获取二手奢侈品电商平台商品数据,并通过数据分析研究奢侈品的保值率特性。研究将使用最新的爬虫技术(包括Playwright、异步处理和数据清洗技术)来高效获取数据,并利用Pandas、Matplotlib等数据分析库进行深入的数据可视化分析。本文详细介绍了爬虫的设计思路、实现过程以及数据分析方法,为奢侈品投资和消费提供数据参考。关键词:Python爬虫、奢侈品保值率、数据分析、Playwright、异步处理。

2201_76125261的博客 512

Java并发基础概念

Java并发基础概念进程与线程进程线程进程与线程的区别并行与并发并发并行同步和异步 进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 进程是系统分配资源的最小单元 线程 一个进程可以有多个线程 线程是cpu调度的基本单位,线程之间共享进程资源 进程与线程的区别 进程的独立的,而线程存在于进程内,是进程的一个子集 进程拥有共享的资源,供内部的线程

small_engineer的博客 1550

1.1什么是Zephyr?与FreeRTOSRT-Thread对比

我自己的项目里,三个系统都用过。这个芯片的原厂BSP哪个OS做得最靠谱?(实测,别看广告)项目核心需求是不是某个OS的“长板”?(别为了10%的功能牺牲90%的稳定性)团队三个月后能不能愉快地维护代码?(开发体验影响长期生产力)最后送一句干货:选型定不下来时,拿一块项目用的开发板,分别用三个OS跑同一个demo(比如按键控制LED+串口打印)。移植过程遇到的问题、代码看起来舒不舒服,你的直觉会告诉你答案。嵌入式没有完美解,只有适合当下的解。选好了,就踏实地写代码;

m0_50546716的博客 654

java并发-基础概念汇总

上下文切换是现代操作系统的基本功能,因其每次需要保存信息恢复信息,这将会占用 CPU,内存等系统资源进行处理,也就意味着效率会有一定损耗,如果频繁切换就会造成整体效率低下。这其中前三种都会发生线程切换,线程切换意味着需要保存当前线程的上下文,留待线程下次占用 CPU 的时候恢复现场。线程在执行过程中会有自己的运行条件和状态(也称上下文),比如上文所说到过的程序计数器,栈信息等。一个程序运行多个线程是没有问题,多个线程读共享资源也没有问题,在多个线程对共享资源读写操作时发生指令交错,就会出现问题。

埃泽漫笔 987

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java Popular Tutorials热门教程汇总

CountDownLatch、CyclicBarrier和Semaphore 什么时候使用CountDownLatch Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

Hello CYC 318

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

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

Java程序员面试常见试题汇总

  下面是Java程序员相关的热门面试题,你可以用它来好好准备面试。 什么是线程?   线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。 ...

a6984021的博客 8564

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

2019年全网最热门的123个Java并发面试题总结

前言 并发编程几乎是所有互联网公司面试必问的问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。 关于Java并发编程的知识总结了个思维导图,分享给大家 整理了网络上热门的123道Java并发面试题,看看你都遇到过哪些? Jav...

程序员追风的博客 5506

Java面试题汇总

1.Java中有哪些基本数据类型?String是基本数据类型吗?String类是否能够继承? 答:1.java定义了4中类8种基本类型:     &a

凯耐的博客 3万+

Java【并发】面试题

Java【并发】面试题 Java 线程 简述线程、进程、程序的基本概念? 程序 程序,是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

木村的博客 2571

【锁】的相关概念汇总

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现。如 synchronized 和 ReentrantLock(并发包中的锁类)等 。 死锁,死锁的实现,悲观锁和乐观锁的区别等

尕白白的专栏 275

Java并发编程面试题八股文资源下载:全面解析Java并发编程面试必备

Java并发编程面试题八股文资源下载:全面解析Java并发编程面试必备 【下载地址】Java并发编程面试题八股文资源下载 探索Java并发编程的奥秘,掌握面试必备技能!本资源全面梳理了Java并发编程的核心知识点,涵盖基本概念、锁机制、并发工具类、线程池及其优化策略。通过详细的解释和实用示例,帮助你深入理解并发编程的原理...

gitblog_06712的博客 299

JAVA高并发多线程必须懂的50个问题

本文由 ImportNew - 李 广 翻译自 javarevisited。欢迎加入翻译小组。转载请见文末要求。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提...

java1703的博客 263

java 高并发中的一些问题

http://blog.youkuaiyun.com/u011163372/article/details/73995897 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型,JDK1.5

baiducheng的专栏 1112

Java 并发工具类:CountDownLatch、CyclicBarrier、Semaphore 详解

是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。其内部维护了一个计数器,该计数器的初始值由构造函数指定,每当一个线程完成任务后,会调用方法将计数器减 1,当计数器的值变为 0 时,等待在await()方法上的线程将被唤醒继续执行。是一个同步辅助类,它允许一组线程相互等待,直到所有线程都到达某个公共屏障点(barrier point)。与不同的是,可以被重复使用,当所有线程都到达屏障点后,计数器会被重置,可以继续进行下一轮的等待。Semaphore。

dsq_MaDing的博客 782

Java并发--Java线程面试题 Top 50

 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。   在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,...

StoneNotes的专栏 347
上一篇: 分布式MySQL数据库TDSQL架构分析
下一篇: 深入理解Java虚拟机到底是什么
cq1982
博客等级 码龄21年 107粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值