1. 临界资源 package main import ( "fmt" "time" ) func main() { /* 临界资源: */ a := 1 go func() { a = 2 fmt.Println("goroutine中。。",a) }() a = 3 time.Sleep(1) ...
分类:
其他好文 时间:
2020-02-03 09:57:08
阅读次数:
89
公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁(实现秒杀的一种解决方案) (select * from product p where p.type=’xxxxx’ for update) 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 这些分类并不是全是指锁的状态,有的指锁 ...
分类:
编程语言 时间:
2020-01-30 21:13:57
阅读次数:
64
ReentrantLock实现了标准的互斥锁:一次最多只有一个线程能够持有相同ReentrantLock。但是互斥通常做为保护数据一致性的很强的加锁约束,因此,过分的限制了并发性。互斥是保守的加锁策略,避免了 “写/写”和“写/读"的重读,但是同样避开了"读/读"的重叠。在很多情况下,数据结构是”频 ...
分类:
其他好文 时间:
2020-01-28 20:53:51
阅读次数:
58
常用概念线程安全停止线程守护线程多线程通讯锁Synchornized悲观锁乐观锁共享锁/独占锁读写锁的机制死锁LockReentrantLockConditionCountDownLatchCyclicBarrier信号量SemaphoreThreadLocal高并发线程安全与不安全的类不安全的sp... ...
分类:
编程语言 时间:
2020-01-28 12:26:58
阅读次数:
74
锁类型 锁根据其特性能够划分出各种各样的锁类型,该文主要介绍以下锁的作用及特性 1. 乐观锁/悲观锁 2. 独享锁/共享锁 3. 互斥锁/读写锁 4. 可重入锁 5. 公平锁/非公平锁 6. 分段锁 7. 偏向锁/轻量级锁/重量级锁 8. 自旋锁 乐观锁/悲观锁 乐观锁与悲观锁并不是特指某两种类型的 ...
分类:
编程语言 时间:
2020-01-24 17:17:42
阅读次数:
96
两个锁都是依赖AQS实现的,方法基本是Sync的封装,主要看Sync的设计实现, 一、可重入独占锁ReentrantLock 1.静态内部抽象类Sync //继承AQS abstract static class Sync extends AbstractQueuedSynchronizer { p ...
分类:
其他好文 时间:
2020-01-22 18:18:05
阅读次数:
111
概述 ReentrantReadWriteLock维护了一对相关的锁,它们分别是共享readLock和独占writeLock。关于共享读锁和排他写锁的概念其实很好理解。所谓共享读锁就是一个线程读的时候,其它线程也可以来读(共享),但是不能来写。排他写锁是指一个线程在写的时候,其它线程不能来写或读(排 ...
分类:
其他好文 时间:
2020-01-17 18:57:36
阅读次数:
67
读已提交级别: (1)查询使用的是主键时,只需要在主键值对应的那一个条数据加锁即可。 (2)查询使用的是唯一索引时,只需要对查询值所对应的唯一索引记录项和对应的聚集索引上的项加锁即可。 (3)查询使用的是普通索引时,会对满足条件的索引记录都加上锁,同时对这些索引记录对应的聚集索引上的项也加锁。 (4 ...
分类:
数据库 时间:
2020-01-08 23:19:12
阅读次数:
106
载自:https://my.oschina.net/meandme/blog/1839265 好长一段时间前,某些场景需要JUC的读写锁,但在某个时刻内读写线程都报超时预警(长时间无响应),看起来像是锁竞争过程中出现死锁(我猜)。经过排查项目并没有能造成死锁的可疑之处,因为业务代码并不复杂(仅仅是一 ...
分类:
编程语言 时间:
2020-01-06 14:30:38
阅读次数:
97
mysql的锁分为 Lock 和 Latch . Latch 一般称为 闩锁 ,因为其要求锁定的时间必须非常短。若持续的时间长,则应用的性能会非常差,在 In弄DB引擎中,Latch又可以分为mutex(互斥量)和 rwlock(读写锁)。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死 ...
分类:
数据库 时间:
2020-01-05 00:43:44
阅读次数:
222