随着双11,春运抢票这种业务的存在,分布式高并发成为了技术人员必须要面对的问题,那么如果保证数据的准确性呢?一般主流的方式就是加锁。 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。 首先,为了确保分布式锁可用,我们至少要确保锁 ...
分类:
其他好文 时间:
2018-06-26 12:24:12
阅读次数:
158
synchronized与Lock的区别synchronizedsynchronized是JVM中的关键字,加锁和释放锁都是通过JVM自动完成。说到这个点,就需要说明一下class和其instance在JVM的存储情况。class存储在持久层,并且会存储锁的信息。object实例存储在新生代或者老年代,同样其也存储了该实例对象的锁信息。class类锁publicclassUser{publicst
分类:
其他好文 时间:
2018-06-25 16:45:18
阅读次数:
143
本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 改进后 减小锁的粒度 将大对象,拆成小对象,大大增加并行度,降低锁竞争. 如此一来偏向锁,轻量级锁成功率提高. 一个简单的例子就是jdk内置的ConcurrentHashMap与SynchronizedM ...
分类:
编程语言 时间:
2018-06-25 10:57:03
阅读次数:
146
本篇文章将介绍两种自己动手实现可重入锁的方法。 我们都知道JDK中提供了一个类 ,利用这个类我们可以实现一个可重入锁,这种锁相对于 来说是一种轻量级锁。 重入锁的概念 重入锁实际上指的就是一个线程在没有释放锁的情况下,可以多次进入加锁的代码块。 这种情况下,如果我们加的锁不是支持可重入的锁,那么b方 ...
分类:
其他好文 时间:
2018-06-25 01:20:14
阅读次数:
275
公平锁/非公平锁(多线程执行顺序的维度) 概念理解 公平锁:加锁前先查看是否有排队等待的线程,有的话优先处理排在前面的线程,先来先得。 非公平所:线程加锁时直接尝试获取锁,获取不到就自动到队尾等待。 例子 ReentrantLock 同时支持两种锁 适用场景 更多的是直接使用非公平锁:非公平锁比公平 ...
分类:
其他好文 时间:
2018-06-21 23:45:11
阅读次数:
229
双重检查加锁,只有在第一次实例化时,才启用同步机制,提高了性能。 ...
分类:
编程语言 时间:
2018-06-21 20:14:01
阅读次数:
275
阻塞队列 再写阻塞列队之前,我写了一篇有关queue集合相关博客,也主要是为这篇做铺垫的。 网址:【java提高】 queue集合 在这篇博客中我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻 ...
分类:
编程语言 时间:
2018-06-20 22:42:48
阅读次数:
254
MySQL使用了3种锁机制 行级锁,开销大,加锁慢,会出现死锁,发生锁冲突的概率最高,并发度也最高 表级锁,开销小,加锁快,不会出现死锁,发生锁冲突的概率最低,并发度最低 页级锁,开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 MySQL的存储引擎,这里指常用的 ...
分类:
数据库 时间:
2018-06-20 21:29:58
阅读次数:
152
一、DRBD介绍介绍部分来自:http://www.ywnds.com/?p=66191DRBD基本功能DistributedReplicatedBlockDevice(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。DRBD是将不同机器上的两块大小相同的硬盘或是两个分区让它们的每一位都对齐,从而当用户空间有数据要存储到主节点磁盘时,
分类:
其他好文 时间:
2018-06-19 10:34:43
阅读次数:
182
Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源,加锁是个重要的环节。因为python原生的list,dict等,都是not thread safe的。而Queue,是线程安全的 ...
分类:
编程语言 时间:
2018-06-19 00:52:14
阅读次数:
232