![](https://img-blog.csdnimg.cn/direct/8b831c09cdbc4f70955cba4655f4d3d1.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程与多线程(锁)
文章平均质量分 63
发是指多个任务在宏观上看起来是同时执行的,但在微观上,由于CPU的时间片轮转机制,这些任务实际上是交替执行的。 而并行则是指多个任务在同一时刻真正地在多个核心上同时执行。
missterzy
世界上没有做不到的事
只有不想去完成的事
可惜我比较懒
展开
-
对行锁、间隙锁、临键锁的理解
总的来说,行锁、间隙锁、临键锁只是表示锁定数据的范围,最终目的是解决幻读的问题临键锁相当于行锁+间隙锁,因此当我们使用非唯一索引进行精准匹配的时候,会默认加临键锁因为它需要锁定匹配的这一行数据,还需要锁定这一行数据对应的左开右闭区间。间隙锁,顾名思义,就是锁定一个索引区间。在普通索引或者唯一索引列上,由于索引是基于B+树的结构存储的,所以默认会存在一个索引区间,如下图所示。当我们针对主键或者唯一索引加锁的时候,MySQL默认会对查询的这一行数据加行锁,避ELECT免其他事务对这一行数据进行修改。原创 2024-05-27 10:49:30 · 473 阅读 · 0 评论 -
ReentrantLock 是如何实现锁的公平性和非公平性及实现原理
因为一个竞争锁的线程如果按照公平的策略去阻塞等待,同时 AOS再把等待队列里的线程唤醒,会涉及内核态的切换,对性能的影响比较大。如果使用非公平策略,当前线程正好在上一个线程释放锁的临界点抢到了锁,就意味着这个线程不需要切换到内核态,虽然对原本应该要被唤醒的线程不公平,但是提升了锁竞争的性能。ReentrantLock内部使用了AQS来实现锁资源的竞争,没有竞争到锁资源的线程,会加入AQS同步队列,这个队列是一个FIFO的双向链表。(1)公平,指的是竞争锁资源的线程,严格按照请求顺序来分配锁。原创 2024-05-27 10:37:14 · 270 阅读 · 0 评论 -
什么是可重入锁,它的作用是什么
可重入是多线程并发编程里一个比较重要的概念。简单来说,就是在运行的某个方法或代码片段,因为抢占资源或者中断等原因,导致方法或者代码片段的运行中断,等待中断程序执行结束后,重新进入这个方法或者代码片段中运行,并且运行结果不会受到影响,那么这个方法或者代码片段就是可重入的。而可重入锁,简单来说就是一个线程如果抢占到了互斥锁资源,在锁释放之前再去竞争同一把锁的时候,不需要等待,只需要记录重入次数。原创 2024-05-27 10:11:37 · 191 阅读 · 0 评论 -
synchronized 和 Lock 的区别是什么
synchronized 和 Lock 都是Java 中用来解决线程安全问题的工具,关于 synchronized 和 Lock的区别,可以从以下4个方面来给大家做一个详细的分析。原创 2024-05-26 11:30:39 · 698 阅读 · 0 评论 -
乐观锁与悲观锁的区别?
悲观锁在操作数据时比较悲观,每次操作数据的时候都认为别的线程也会同时修改数据,所以每次操作数据的时候都会上锁,这样别的线程想拿到这个数据就会阻塞,直到它拿到锁。首先来看乐观锁,它适用于写少读多的情况,也就是说减少操作冲突,这样可以省去锁竞争的开销,提高系统的吞吐量。因为,如果还使用观锁,会经常出现操作冲突,这样会导致应用层不断地重试,反而会降低系统的性能。乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据,所以不会上锁,但是在更新的时候会判断在此期间别的线程有没有更新过这个数据。原创 2024-05-26 15:00:00 · 315 阅读 · 0 评论 -
AQS 和CAS是什么
AQS 是 AbstractQueuedSynchronizer 的简称,是并发编程中比较核心的组件。在很多大厂的面试中,面试官对于并发编程的考核要求相对较高,简单来说,如果你不 懂并发编程,那么你很难通过大厂高薪岗位的面试。我们来看一下,关于“谈谈你对 AQS 的理解“,看看普通人和高手是如何回答的!原创 2024-05-26 09:30:15 · 153 阅读 · 0 评论