分布式锁在多实例部署,分布式系统中经常会使用到,这是因为基于jvm的锁无法满足多实例中锁的需求,本篇将讲下redis如何通过Lua脚本实现分布式锁,不同于网上的redission,完全是手动实现的 我们先来看一个无锁的情况下会导致什么问题: 这是一个普通的更新用户年龄的功能,各层代码如下,访问con ...
分类:
其他好文 时间:
2018-05-06 12:13:48
阅读次数:
128
一 . 概述 我们知道加锁会对多线程的并发有影响,那么我们是否有无锁的方式保证线程的安全性呢?有的,就是CAS方式. CAS的核心就是乐观的尝试,将线程的阻塞变成了线程的尝试,认为即使在不断尝试的代价也比阻塞后唤醒的代价要小. 二 CAS CAS到底是什么呢? 其实就是一个JVM的指令,其中这个指令 ...
分类:
其他好文 时间:
2018-05-06 01:35:26
阅读次数:
153
减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。1. 无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。2. CAS算法。Java的Atomic包使用CAS算法 ...
分类:
其他好文 时间:
2018-05-04 12:05:19
阅读次数:
173
线程安全的对象生命期管理 解决对象构造的线程安全 当我们需要动态分配对象时( 懒加载 ), 如果在多个线程中运行这一部分代码,可能出现多次初始化的问题。 单例模式 c++ 11 之后static 变量的初始化是线程安全的。可以利用静态变量来实现单例模式,解决重复初始化的问题。 std::call_o ...
分类:
编程语言 时间:
2018-04-29 15:28:25
阅读次数:
164
每天学习一点点 编程PDF电子书、视频教程免费下载: http://www.shitanlife.com/code ...
分类:
编程语言 时间:
2018-04-12 17:59:44
阅读次数:
264
一、无锁类的原理 1.1 CAS CAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后,CAS返回当前V的真实值 。CAS操作是抱 ...
分类:
编程语言 时间:
2018-04-07 11:23:48
阅读次数:
187
锁 锁是用来做并发的最简单的方式,其代价也是最高的,java 在JDK1.5之前都是通过synchronized关键字来保证同步的,他是一种独占锁,使用synchronized同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗cpu资源,锁还存在着其它一些缺点,当一个线程正在等待锁 ...
分类:
编程语言 时间:
2018-03-31 14:47:25
阅读次数:
236
AtomicReference 这个类和AtomicInteger非常类似,只是AtomicReference对应普通的对象引用,而AtomicInteger 它是对整数的封装,它的方法如下 对weakCompareAndSet 说明: 第一次看weakCompareAndSet doc文档的说明时 ...
分类:
其他好文 时间:
2018-03-28 12:19:11
阅读次数:
129
java多线程编程的无锁CAS底层都是通过 Unsafe进行操作的:源码如下 ...
分类:
编程语言 时间:
2018-03-27 18:55:41
阅读次数:
195
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Uns ...
分类:
编程语言 时间:
2018-03-27 18:47:31
阅读次数:
268