内容导读:
前三节数据库事务、并发带来的风险以及数据库锁都是为了铺垫事务的隔离性。
事务的隔离性不是无缘无故就存在的,他的存在是为了解决某一类问题,带来某一些操作的便捷;解决的问题是指数据库并发操作中数据一致性保证,带来的便捷是指定义好隔离级别之后,数据库会为操作自动加锁(不同的隔离级别拥有不同的自动锁粒度),而不用每次操作都手动的加锁。...
分类:
数据库 时间:
2015-07-26 11:08:50
阅读次数:
264
ConcurrentMap和Guava的LocalCache实现原理相近,底层的存储方式使用的时table方式来存储。这里使用最简单且最暴力的方式,在每次访问的时候均加锁。ConcurrentHashMap接口:public interface ConcurrentHashMap { publ...
分类:
编程语言 时间:
2015-07-25 22:41:25
阅读次数:
232
【摘要】本文介绍单生产者单消费者模型的队列。根据写入队列的内容是定长还是变长,分为单生产者单消费者定长队列和单生产者单消费者变长队列两种。单生产者单消费者模型的队列操作过程是不需要进行加锁的。生产者通过写索引控制入队操作,消费者通过读索引控制出队列操作。二者相互之间对索引是独享,不存在竞争关系。...
分类:
其他好文 时间:
2015-07-24 20:51:12
阅读次数:
154
首先,在向数据库中批量插入数据的时候得作一个事务,然后,需要在插入数据之前把相应表中的所有数据清除。这里遇到死锁,原因是在删除数据和插入数据时发生了死锁,解决的办法是将删除数据查询加锁,代码: Stri...
分类:
Web程序 时间:
2015-07-23 20:07:30
阅读次数:
152
mysqldump是MySQL自带的逻辑备份工具,可以进行温备也可以进行热备,两者都是在数据库服务不停止的情况下进行的备份对于myisam只能进行温备myisam不支持事务,加锁也比较快,没有热备机制对于InnoDB最好使用热备份InnoDB支持事务,在生产环境中,使用热备加锁可能要很久,事务..
分类:
数据库 时间:
2015-07-22 16:36:30
阅读次数:
192
悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁。
乐观锁,就是通过标记值控制,每次操作前通过标记值判断是否是最新内容,最新内容就可以操作,不是最新的就继续循环判断标记值,直到是最新类容。
在大量冲突发生时,悲观锁的锁消耗大,乐观锁的读取次数会多。...
分类:
编程语言 时间:
2015-07-22 13:06:40
阅读次数:
147
1、多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为()A同步,B异步,C只读,D只写答案:A对该数据加锁,放在同步代码块中synchronize(){}2、以下描述正确的是CallableStatement是PreparedStatement的父接口PreparedSt...
分类:
其他好文 时间:
2015-07-21 14:13:54
阅读次数:
112
我们在实际开发中需要对离散的方式加锁实现线程安全,当然我们有多种实现方式,这只是其中一种,使用起来比较方便
+ (id)performSelectorWithTarget:(id)target selector:(SEL)selector withObject:(id)arg1
,...NS_REQUIRES_NIL_TERMINATION;
{
@synchronize...
分类:
其他好文 时间:
2015-07-17 12:11:36
阅读次数:
255
前言
1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步、加锁问题,造成一些性能上的开销。我们也可以配合使用NSOperation和NSOperationQueue实现多线程编程,实现步骤大致是这样的:
1> 先将需要执行的操作封装到一个NSOperation对象中
2> 然后将NSOperation对象添加到...
分类:
编程语言 时间:
2015-07-14 10:07:44
阅读次数:
244
有时候不是简单的需要 加锁/解锁, 而是需要根据一定条件满足后进行 加锁/解锁.以一个生产中与消费者的例子,介绍条件锁的用法。static NSInteger CONDITION_NO_DATA //条件一: 没有数据static NSInteger CONDITION_HAS_DAT...
分类:
其他好文 时间:
2015-07-13 15:35:28
阅读次数:
743