为什么需要锁 多任务环境 任务需要对统一共享资源进行写操作 对资源的访问是互斥的 锁的操作: 竞争锁-->占有锁-->释放锁。 ...
分类:
其他好文 时间:
2018-05-16 00:38:01
阅读次数:
94
本人是做java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些,相信面试会轻松许多。 1. junit用法,before,beforeClass,after, afterClass的执行顺序2. 分布式锁3. n ...
分类:
其他好文 时间:
2018-05-10 01:08:56
阅读次数:
205
1. junit用法,before,beforeClass,after, afterClass的执行顺序2. 分布式锁3. nginx的请求转发算法,如何配置根据权重转发4. 用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap)5. 线程的状态5. 线程的 ...
分类:
其他好文 时间:
2018-05-10 01:07:42
阅读次数:
310
转载自http://www.jb51.net/article/118312.htm * 在集群等多服务器中经常使用到同步处理一下业务,这是普通的事务是满足不了业务需求,需要分布式锁 * * 分布式锁的常用3种实现: * 0.数据库乐观锁实现 * 1.Redis实现 使用redis的setnx()、g ...
分类:
其他好文 时间:
2018-05-07 13:37:55
阅读次数:
329
什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。 而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线 ...
分类:
其他好文 时间:
2018-05-07 11:50:02
阅读次数:
180
分布式锁在多实例部署,分布式系统中经常会使用到,这是因为基于jvm的锁无法满足多实例中锁的需求,本篇将讲下redis如何通过Lua脚本实现分布式锁,不同于网上的redission,完全是手动实现的 我们先来看一个无锁的情况下会导致什么问题: 这是一个普通的更新用户年龄的功能,各层代码如下,访问con ...
分类:
其他好文 时间:
2018-05-06 12:13:48
阅读次数:
128
一. RAC 并发 RAC 的本质是一个数据库,运行在多台计算机上的数据库,它的主要任务是数据库就是事务处理,它通过 Distributed Lock Management(DLM:分布式锁管理器) 来解决并发问题。因为RAC的资源是共享的,为了保证数据的一致性,就需要使用DLM来协调实例间对资源的 ...
分类:
数据库 时间:
2018-05-06 01:30:31
阅读次数:
222
一、单机模式 在这种情况下,如果我们实现锁可以使用synchronized或ReentrantLock,但是在分布式情况下,它们最多只能锁住当前JVM的线程,对于其它server的线程无能为力。那么怎么处理呢? 二、分布式锁 1、基于数据库表做乐观锁 一般是通过为数据库表添加一个 “version ...
分类:
其他好文 时间:
2018-05-01 20:52:14
阅读次数:
277
实现思路 公平锁:创建有序节点,判断本节点是不是序号最小的节点(第一个节点),若是,则获取锁;若不是,则监听比该节点小的那个节点的删除事件。 非公平锁:直接尝试在指定path下创建节点,创建成功,则说明该节点抢到锁了。如果创建失败,则监听锁节点的删除事件,或者sleep一段时间后再重试。 可重入:使 ...
分类:
其他好文 时间:
2018-05-01 20:32:27
阅读次数:
194
原理 进程需要访问共享数据时, 就在"/locks"节点下创建一个sequence类型的子节点, 称为thisPath. 当thisPath在所有子节点中最小时, 说明该进程获得了锁. 进程获得锁之后, 就可以访问共享资源了. 访问完成后, 需要将thisPath删除. 锁由新的最小的子节点获得. ...
分类:
其他好文 时间:
2018-04-28 15:48:23
阅读次数:
195