CopyOnWriteArrayList:通过copy一份以前元素的快照,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器"。该集合适合读多写少的场景(读没有加锁,其他更新操作均有加锁)。 元素添加,上锁,线程安全的,每次只允许一个线程对该集合修改。 在指定位置上添加元素: 更新指定位置 ...
分类:
其他好文 时间:
2017-12-05 11:58:53
阅读次数:
191
对于一个对象来说,我们为了保证它的并发性,通常会选择使用声明式加锁方式交由我们的 Java 虚拟机来完成自动的加锁和释放锁的操作,例如我们的 synchronized。也会选择使用显式锁机制来主动的控制加锁和释放锁的操作,例如我们的 ReentrantLock。但是对于容器这种经常发生读写操作的类型 ...
分类:
其他好文 时间:
2017-12-02 13:05:23
阅读次数:
136
一、两个线程一个生产者一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个。 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用标记或加锁机制。 wait() / nofity() 方法是基类Object的两个方法,也就意味着 ...
分类:
编程语言 时间:
2017-11-30 23:42:32
阅读次数:
397
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有。望各位支持! MySQL通过MVCC和锁来实现并发控制,在4个隔离级别中,读写数据方式及加锁方式有所不同,以满足不同的业务需求。 而在MSSQL中,也是通过锁和MVCC的行版本来实现并发控 ...
分类:
数据库 时间:
2017-11-27 11:13:06
阅读次数:
205
1. mysql都有什么锁 MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁 ...
分类:
数据库 时间:
2017-11-25 13:07:33
阅读次数:
225
MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读 ...
分类:
Web程序 时间:
2017-11-22 13:10:49
阅读次数:
245
数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事 ...
分类:
其他好文 时间:
2017-11-17 19:56:05
阅读次数:
137
在MySQL中,使用MVCC来实现REPEATABLE-READ隔离级别,由于SELECT操作不会对数据加锁,其他回话可以修改当前回话所读取过的数据而不会被阻塞,因此读写不冲突。 在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。 ...
分类:
数据库 时间:
2017-11-17 00:00:25
阅读次数:
286
一、互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。 1、上厕所 先举个通俗易懂的例子,家里的厕所, ...
分类:
系统相关 时间:
2017-11-14 14:18:41
阅读次数:
299
1. 为什么会有Lock的出现 JDK5之前,我们一般都是通过synchronized来进行加锁操作,但synchronized是一种悲观锁,如果这个获取到锁的线程被阻塞了,但却没有释放锁,其他线程将只能一直无限期的等待着。而Lock可以实现其他线程只等待一定的时间或者能够响应中断。 又比如,当有多 ...
分类:
编程语言 时间:
2017-11-12 17:27:33
阅读次数:
165