1 前言 控制多线程同步的方法很多,比如加同步锁机制,但是这会带来一定的性能消耗,因为要排队机制,前段时间看了别人的代码有个类(ThreadLocal<T> 泛型类)引起了我的注意。 2. 概念ThreadLocal 查看MSDN解释:提供数据的线程本地存储,其实通俗易懂的讲就是一个变量在多个线程中 ...
分类:
编程语言 时间:
2017-05-26 13:27:04
阅读次数:
497
悲观锁机制是数据库自带,一般都是在sql后加forupdate,这里就暂时不讨论JPA的乐观锁1.首先在entity中加入对应的注解@Version相当于执行UPDATEMYENTITYSET...,VERSION=VERSION+1WHERE((ID=?)AND(VERSION=?))在JPA里面,发现版本号不一致,会报异常,如果是单纯的Bean中,只能捕..
分类:
其他好文 时间:
2017-05-24 22:25:51
阅读次数:
121
乐观锁和悲观锁 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁 ...
分类:
Web程序 时间:
2017-05-22 09:25:59
阅读次数:
184
最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便大家。 此测试环境 Mysql 5.5 基于innodb 引擎 [sql] view plain c ...
分类:
数据库 时间:
2017-05-19 12:57:44
阅读次数:
281
对于并发控制而言, 锁是一种悲观的策略。它总是假设每一次的临界区操作会产生冲突,因此,必须对每次操作都小心翼翼。如果有多个线程同时需要访问临界区资源,就宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。 而无锁是一种乐观的策略,它会假设对资源的访问是没有冲突的。既然没有冲突,自然不需要等待,所以所 ...
分类:
其他好文 时间:
2017-05-18 23:56:30
阅读次数:
292
以购买商品举例: ① 从数据库获取库存的数量。 ② 检查一下库存的数量是否充足。 ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例)。 ④ 最后完成购买。 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下。 这里暂时就不测试了,下面会针对并发的处理给出测试结果。 创建表: 第一种 ...
分类:
数据库 时间:
2017-05-17 17:31:05
阅读次数:
280
MySQL有三种锁的级别:页级、表级、行级。 MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking); BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁; InnoDB存储引擎既支持行级锁(row-level locking),也 ...
分类:
数据库 时间:
2017-05-16 12:54:01
阅读次数:
205
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些 ...
分类:
其他好文 时间:
2017-05-14 21:45:29
阅读次数:
240
Synchronized Java中的每个对象都可以作为锁。 锁的内部机制 一般锁有4种状态:无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态。 在进一步深入之前,我们先认识下两个概念:对象头和monitor。 什么是对象头? 在hotspot虚拟机中,对象在内存的分布分为3个部分:对象头,实例数据 ...
分类:
其他好文 时间:
2017-05-14 18:04:39
阅读次数:
189
最近的项目中,因为涉及到Mysql数据中乐观锁和悲观锁的使用,所以结合项目和网上的知识点对乐观锁和悲观锁的知识进行总结。 悲观锁介绍 悲观锁是对数据被的修改持悲观态度(认为数据在被修改的时候一定会存在并发问题),因此在整个数据处理过程中将数据锁定。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据 ...
分类:
数据库 时间:
2017-05-13 16:05:53
阅读次数:
282