Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的....
分类:
其他好文 时间:
2015-08-27 12:56:46
阅读次数:
140
之前我们讲过ReentrantLock,这种锁不区分读操作和写操作,如果有一个线程在执行读操作,那么其他的所有的线程不能进行任何的读操作或者写操作。这样可以保证程序的互斥性,但是降低了程序的并发性,使执行效率降低,没有有效的发挥多线程的优势。比如说,有一个系统,主要是以读操作为主,比如有10个线程负责读数据,只有一个线程负责写数据。如果用我们之前的ReentrantLock方法,这10个线程中没有...
分类:
编程语言 时间:
2015-08-27 09:35:41
阅读次数:
225
有个网友问我乐观锁和悲观锁的相关问题,于是就来阐述一下这个问题。首先说乐观锁,它是Pessimistic Lock的简写,也就是所谓的悲观锁。它是每次取数据的时候都会认为别人会修改它的数据,因此它是在每次取数据之前都会进行加锁操作,这样别人拿数据的时候就必须等待直到它释放锁。其实我们的关系型数据库中就用到了很多这种锁机制,比如行锁、表锁、写锁等等,都是在操作之前首先加一个锁。
...
分类:
其他好文 时间:
2015-08-19 20:32:54
阅读次数:
186
Set数据类型及操作Set集合是通过hash table实现的,所以添加、删除和查找的复杂度都是O(1),hash table会随着添加或者删除自动的调整大小,需要注意的是 hash table大小时候需要同步(获取写锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已...
分类:
其他好文 时间:
2015-08-15 09:01:20
阅读次数:
113
1、原子操作,是其它同步方法的基础。2、自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源。3、读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会退化。因此,提供了读写自旋锁,读锁可以加读锁,不能加写锁,写锁不能加任何锁。4、需要注意的几项: 普通....
分类:
系统相关 时间:
2015-08-13 21:43:15
阅读次数:
265
8.5 Slim读/写锁(SRWLock)——轻量级的读写锁(1)SRWLock锁的目的 ①允许读者线程同一时刻访问共享资源(因为不存在破坏数据的风险) ②写者线程应独占资源的访问权,任何其他线程(含写入的线程)要等这个写者线程访问完才能获得资源。(2)SRWlock锁的使用方法 ①初始化SR...
分类:
编程语言 时间:
2015-08-13 17:15:29
阅读次数:
178
mysql的锁: 读锁:共享锁。添加锁后对读没有影响,但是对写会阻塞。 写锁:独占锁。添加锁后对读写均会阻塞。 表锁: 行锁: 锁的实现位置:mysql服务层(sql语句的解析、优化):手动添加lock table table_name lock_type;其中lock_type为read...
分类:
数据库 时间:
2015-08-13 11:56:05
阅读次数:
208
说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同。
三类常见引擎:
MyIsam :不支持事务,不支持外键,所以访问速度快。锁机制是表锁,支持全文索引
InnoDB :支持事务、支持外键,所以对比MyISAM,InnoDB的处理效率差一些,并要占更多的磁盘空间保留数据和索引。锁机制是行锁,不支持全文索引
Memory:数据是存放在内存中的,默认哈希...
分类:
数据库 时间:
2015-08-09 09:33:03
阅读次数:
197
读写锁 package?cn.sniper.thread.lock;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.concurrent.locks.Lock;
import?java.util.concurrent.locks.ReadWriteLock;
import?java.util...
分类:
编程语言 时间:
2015-08-08 16:44:12
阅读次数:
283
有一种单一写线程,多个读线程并发的场景,比如测量数据的读取与更新,消费者会比较多,生产者只有一个。以下图为例:
左侧是一种经典的解法,对数据整个操作加锁。为了一个写数据线程,于将所有读线程也进行加锁显然有点浪费了。于是提出读写锁(Reader/Writer Lock), 即使是使用了读写锁,其本质也是一样的,而且在POSIX下的pthread它的内部实现是基于mutex,所以它的开销更大。如果...
分类:
其他好文 时间:
2015-08-07 01:52:29
阅读次数:
241