锁、分布式锁、无锁分布式无锁
为什么要有锁?
保证资源线程安全,简单说就是在多线程情况下不会乱。
锁的分类
- JVM锁:类锁、对象锁、偏向、公平、重入、死锁
- 分布式锁:Redis、DB、zookeeper
类锁和对象锁的区别
类锁
- 方法中写着static synchronized
- 整个Object.class只有一个锁,所有对象只有一个锁
对象锁
- 方法声明中只写synchronized
- Object的实例化对象object1、object2、object3,各有一个自己的锁
JVM锁如何实现
同步方法
public synchronized void save(){}
注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类
同步块
synchronized(object){
}
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
volatile
- volatile关键字为域变量的访问提供了一种免锁机制,
- 使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,
- 因此每次使用该域就要重新计算,而不是使用寄存器中的值
- volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
注:这个虽然能实现线程安全,但是没有原子性,如(i++)
重入锁:ReenreantLock
- ReentrantLock() : 创建一个ReentrantLock实例
- lock() : 获得锁
- unlock() : 释放锁
注:ReentrantLock()还有一个可以创建公平锁的构造方法,但由于能大幅度降低程序运行效率,不推荐使用
并发集合、并发工具类
- ConcurrentHashMap
- CopyOnWriteArrayList
- 并发工具类:java.util.concurrent(JUC)
原子操作:Atomic
使用局部变量实现线程同步:ThreadLocal
分布式锁
Redis
- 单线程,速度快,单点
- 加锁:setNx()、取锁:getNx()
- 或者setString也可以实现分布式锁
DB
悲观锁:select * from table for update(Quartz)
乐观锁:加多个version字段
Zookeeper:待学习。。。。。
无锁、分布式无锁
同样是使用redis实现,用它的自增功能,jedis.incr()
相关推荐
锁、分布式锁、无锁实战全局性ID锁、分布式锁、无锁实战全局性ID锁、分布式锁、无锁实战全局性ID锁、分布式锁、无锁实战全局性ID锁、分布式锁、无锁实战全局性ID
内部资料。关于分布式,并行计算,无锁编程相关的最新研究方向。
Checkup 是用 Go 写的分布式的,无锁的,自托管的健康检查工具和状态页面。它拥有一个优雅,简约的 CLI 和一个地道的 Go 库,他们是完全可互操作的,他们的配置是精美对称的。简介:Checkup 可以定制随时检查您的...
基于令牌桶算法实现的分布式无锁限流框架,支持动态配置规则,支持可视化监控,开箱即用。 Document 使用文档:| 功能概要 限流 降级 授权 注解 监控 黑名单 白名单 控制台 分布式 高可用 设计模式 单例模式 观察者...
AspNetCoreHighConcurrency.Sample AspNetCore高并发示例代码。描述如何使用基于Redis的分布式锁定。...1.基于redis的分布式锁 2,基于Redis的原子操作使用lua脚本 3,基于Redis的原子操作使用Lua脚本和Kafka
tla-rust:在TLA +的协助下,在Rust中编写正确的无锁和分布式状态系统
检查是用Go语言编写的,分布式的,无锁的,自托管的健康检查和状态页。 它具有优雅,简约的CLI和惯用的Go库。 它们是完全可互操作的,并且它们的配置精美对称。 Checkup由作者Matt Holt创建。 它由维护和赞助。 ...
分布式锁 DLock 是 Java 实现的、有效且可靠的分布式锁。 它使用Redis存储锁对象,通过[Lua](脚本)对锁进行原子操作。基于Redis的过期机制,DLock实现了锁[租借](以保证释放。为了提供高性能,DLock采用进程级锁模型...
面试必考之HashMap源码分析与实现 ,微服务架构之Spring Cloud Eureka 场景...锁、分布式锁、无锁实战全局性IDSpringMvc深入理解源码分析 Nosql Redis Jedis常用命令 JAVA并发编程之多线程并发同步业务场景与解决方案
HashMap源码分析与实现、JVM底层奥秘ClassLoader源码分析与案例讲解、大型网站数据库瓶颈之数据库分库分表方案实践、Spring Cloud Eureka场景...互联网系统垂直架构之Session解决方案、锁、分布式锁、无锁实战全局性ID...
基于Disruptor消息队列设计的无锁并发模式 分布式(多进程)架构,几行代码实现一个功能服务器的搭建 多线程设计,注解方式配置,轻松管理所有消息流 强大的RPC功能,调用远程RPC近似于调用本地函数,无需手工定义内部...
高性能的分布式目录服务。 无锁的跳过列表用于管理目录。 引入名称空间(池名称)以隔离不同的应用程序。
采用成熟 Raft 协议,专为全闪存场景设计的分布式块存储系统。使用spdk编程框架编写,利用用户态nvme驱动、无锁队列等特性降低IO路径延迟。引入RDMA网卡进行零拷贝、内核旁路、无需CPU干预的网络通信。使用multi-...
无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你...
使用成熟 Raft 协议,专为全闪存场景设计的分布式块存储系统。fastblock是为解决性能和延迟问题而生的,它的特点是:使用spdk编程框架编写,利用用户态nvme驱动、无锁队列等特性降低IO路径延迟。引入RDMA网卡进行零...
基于分布式架构下分布式锁的解决方案实战 分布式架构实现分布式定时调度 分布式架构-中间件 分布式消息通信 消息中间件在分布式架构中的应用 ActiveMQ ActiveMQ高可用集群企业及部署方案 ActiveMQ P2P及PUB/...
采用成熟 Raft 协议,专为全闪存场景而设计的分布式块存储系统。fastblock是为解决性能和延迟问题而生的,它的特点是:使用spdk编程框架编写,利用用户态nvme驱动、无锁队列等特性降低IO路径延迟。引入RDMA网卡进行零...
无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你...
锁、分布式锁、无锁实战全局性ID 微服务架构之Spring Cloud Eureka 场景分析与实战 高性能必学之Mysql主从架构实践 架构师不得不知道的Spring事物不能回滚的深层次原因 大型公司面试必答之数据结构与算法精讲 ....