ArrayList和LinkedList的区别 知道乐观锁,悲观锁么? 什么情况下用乐观什么情况下用悲观么 volatile关键字的作用 i++是原子性的么? 继续追问内存模型 为什么要设置工作内存和主内存 记得JVM那本书上把工作内存类比为处理器的高速缓存, 所以也就这么说了 说下GC的过程吧 刚 ...
分类:
编程语言 时间:
2017-08-08 21:48:24
阅读次数:
182
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 乐观锁(Op ...
分类:
其他好文 时间:
2017-08-01 16:30:53
阅读次数:
94
老生常谈,这个写的挺好。 http://blog.csdn.net/hongchangfirst/article/details/26004335 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个 ...
分类:
其他好文 时间:
2017-08-01 14:43:31
阅读次数:
147
1.我印象中的事物事务是一种机制,它确保多个SQL语句被当作完整的操作单元来处理,所有的操作都完成时统一提交。 2.关系数据库的事务特性(ACID) ACID:原子性: 事务是数据库的逻辑工作单位,而且必须是原子工作单位,对于修改,要么全部执行,要么全部不执行 一致性:事务在完成时,必须是所有的数据 ...
分类:
其他好文 时间:
2017-07-28 01:02:03
阅读次数:
187
1、锁的出现,是因为并发读写同一个数据的时候,需要进行数据完备性的保护,避免脏读、脏写等。 2、乐观锁,需要在事务中加锁,在读取数据的时候,不必在意数据是否已经被修改了(即允许脏读);但是在写入数据的时候,要检查数据是否已经被修改了(可以通过版本号等机制控制),如果被修改那么就通知事务调用者,事务失 ...
分类:
其他好文 时间:
2017-07-17 15:12:01
阅读次数:
149
锁需要解决的问题:多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。 悲观锁假定其他用户企图访问或者改变你正在访问、更改的对象的概率是很高的,因此在悲观锁的环境中,在你开始改变此对象之前就将该对象锁住,并且直到你提交 ...
分类:
其他好文 时间:
2017-07-17 12:30:21
阅读次数:
124
1. Redis服务端是个单线程的架构,不同的Client虽然看似可以同时保持连接,但发出去的命令是序列化执行的,这在通常的数据库理论下是最高级别的隔离2. 用MULTI/EXEC 来把多个命令组装成一次发送,达到原子性3. 用WATCH提供的乐观锁功能,在你EXEC的那一刻,如果被WATCH的键发 ...
分类:
其他好文 时间:
2017-07-16 14:20:29
阅读次数:
152
锁( locking),这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无 ...
分类:
其他好文 时间:
2017-07-12 13:52:29
阅读次数:
228
共享资源问题 多个线程访问同一个资源时,其顺序不能保证,可能会造成错误。可以用sycronized关键字锁住某个对象,保证其访问是异步的。 另一个方案是用lock。 区别: sycronized是悲观锁,阻塞等待,lock可以搞乐观锁,尝试冲突重试 sycronized死等抱柱信,lock可以设置响 ...
分类:
其他好文 时间:
2017-07-10 22:06:59
阅读次数:
143
一、为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: 1.丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。 2. ...
分类:
数据库 时间:
2017-07-05 18:44:05
阅读次数:
219