摘要: synchronized关键字的作用是线程同步,而线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 synchronized用法 1、 在需要同步的方法的方法签名中加入synchronized关键字 synchronized public void getValue() { ... 阅读全文
posted @ 2019-03-15 22:25 暗渡陈仓xy 阅读(282) 评论(0) 推荐(0)
摘要: JVM在运行时将数据划分为了5个区域来存储,这5个区域图示如下: 其中方法区和堆对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行时线程私有的内存区域。 首先我们熟悉一下一个 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 .class 为扩展名 阅读全文
posted @ 2019-03-15 22:15 暗渡陈仓xy 阅读(536) 评论(0) 推荐(0)
摘要: 批量插入数据使用的sql语句是: mybatis中mapper.xml的代码如下: 批量更新数据使用的sql语句是: 上面这一条mysql语句可以更新多条记录,mybatis中mapper.xml的代码如下: 阅读全文
posted @ 2019-03-15 22:13 暗渡陈仓xy 阅读(1005) 评论(0) 推荐(0)
摘要: Redis事务 Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送 阅读全文
posted @ 2019-03-15 22:12 暗渡陈仓xy 阅读(3140) 评论(0) 推荐(0)
摘要: 前言 场景举例 为什么要使用分布式锁 上图分析: 分布式锁应该具备的条件 分布式锁实现方式-前言 基于数据库的实现方式 创建一个表: 想要执行某个方法,就使用这个方法名向表中插入数据: 成功插入则获取锁,执行完成后删除对应的行数据释放锁: 使用基于数据库的这种实现方式很简单,但是对于分布式锁应该具备 阅读全文
posted @ 2019-03-15 18:31 暗渡陈仓xy 阅读(513) 评论(0) 推荐(0)
摘要: 分布式锁一般有三种实现方式:1.数据库乐观锁;2、基于Redis的分布式锁;3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis的实现分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 代码实现 组件依赖 首先我们通过Maven引入 阅读全文
posted @ 2019-03-15 17:51 暗渡陈仓xy 阅读(274) 评论(0) 推荐(0)
摘要: 背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作。在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不一致问题。 但在实践中,为了提高系统的可用性,我们一般都会进行多实例部署。而不同实例有各自的JVM, 阅读全文
posted @ 2019-03-15 17:18 暗渡陈仓xy 阅读(1083) 评论(0) 推荐(0)