![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 66
关于并发编程的学习
橙橙爱学习
这个作者很懒,什么都没留下…
展开
-
并发和并行的区别
当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发(Concurrent)。原创 2023-07-14 11:51:57 · 333 阅读 · 0 评论 -
进程和线程的区别
一个进程拥有的资源有⾃⼰的堆、栈、虚存空间(页表)、文件描述符等信息。从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB(Process Control Block)进程控制块的结构体。原创 2023-07-13 23:03:07 · 207 阅读 · 0 评论 -
synchronized锁
synchronized是Java的一个关键字。来自官方的解释:Synchronized方法支持一种简单的策略,用于防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读或写操作都通过Synchronized方法完成。Synchronized是最基本的互斥手段,保证同一时刻最多只有1个线程执行被Synchronized修饰的方法 / 代码,其他线程 必须等待当前线程执行完该方法 / 代码块后才能执行该方法 / 代码块。synchronized有三种应用场景。原创 2023-07-23 10:20:08 · 512 阅读 · 0 评论 -
volatile轻量级锁
适用场景:某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值,比如 booleanflag;或者作为触发器,实现轻量级同步。volatile 变量的读写操作都是无锁的,低成本的。它不能替代 synchronized,因为它没有提供原子性和互斥性。volatile 只能作用于属性,我们用volatile修饰属性,这样compilers就不会对这个属性做指令重排序。volatile 可以在单例双重检查中(特殊场景)实现可见性和禁止指令重排序,从而保证安全性。原创 2023-07-23 17:57:23 · 124 阅读 · 0 评论 -
怎么防止死锁
4、尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。5、对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。2、降低锁的使用粒度,尽量保证一个锁只占用一个资源。3、JDK提供的并发包提供的并发容器和工具类。1、避免一个线程同时获取多个锁。原创 2023-07-14 12:25:53 · 151 阅读 · 0 评论 -
形成死锁的条件以及如何避免死锁
死锁是指在并发系统中,。死锁的发生通常需要满足以下四个条件:1.(Mutual Exclusion):至少有一个资源只能同时被一个进程或线程占用。2.(Hold and Wait):进程或线程至少持有一个资源,并且在等待其他资源的同时不释放已经占有的资源。3.不可剥夺条件(No Preemption):资源只能由占有它的进程或线程主动释放,不能被强制剥夺。4.(Circular Wait):存在一个进程或线程的资源请求序列,使得每个进程或线程都在等待下一个进程或线程所占有的资源。原创 2023-08-10 17:09:31 · 527 阅读 · 0 评论 -
进程上下文切换以及应用场景
寄存器像是你的口袋,内存像你的书包,硬盘则是你家里的柜子,如果你的东西存放到口袋,那肯定是比你从书包或家里柜子取出来要快的多。CPU 上下文切换就是先把前一个任务的 CPU 上下文(CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。系统内核会存储保持下来的上下文信息,当此任务再次被分配给 CPU 运行时,CPU 会重新加载这些上下文,这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。原创 2023-08-05 09:00:58 · 227 阅读 · 0 评论 -
进程间的六种通信方式以及优缺点总结
前提知识:每个进程都有自己的用户空间,而内核空间是每个进程共享的。因此进程之间想要进行通信,就需要通过内核来实现。原创 2023-08-04 15:52:31 · 1716 阅读 · 0 评论 -
什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作)。并发虽然是必须的,但是可能会导致以下的问题。原创 2023-08-14 17:09:50 · 881 阅读 · 0 评论 -
java中的锁:Synchronized的四种状态(无锁、偏向锁、轻量级锁、重量级锁)
两个线程竞争同一个资源,如果一个抢占成功,就给他加锁,另一个线程进入阻塞偏向锁适用于几乎没有并发的时候,虽然可以有多线程,但不是同一时刻,每个线程的存活时间都很短轻量级锁可以快速知道锁什么时候释放,不需要让线程进入阻塞队列,提高效率,缺点是增加了cpu的损耗。所以轻量级锁中有个cpu自旋,极大消耗cpu。当并发特别高的时候,对cpu损耗极大,浪费时间。当高并发的情况,竞争失败就放入阻塞队列,这样对cpu消耗极少,这样就升级成了重量级锁 也就是说,在高并发情况下,我们选择重量级锁原创 2023-07-25 17:41:29 · 636 阅读 · 0 评论 -
【并发编程】CAS是什么、ABA问题、应用场景
是(比较并交换)的缩写,是一种,主要用于实现多线程环境下的无锁算法和数据结构,保证了并发安全性。它可以在(如synchronized、Lock)的情况下,对共享数据进行线程安全的操作。CAS操作主要有三个参数:要更新的内存位置、期望的值和新值。原创 2023-08-04 11:21:30 · 366 阅读 · 0 评论 -
finally有什么作用以及常用场景
finally块提供了一种机制,确保在发生异常或正常执行的情况下,某些代码一定会被执行。这对于资源释放、清理操作或确保代码执行的完整性非常有用。原创 2023-08-10 21:27:44 · 1230 阅读 · 0 评论