摘要: 除了 Synchronized 关键字,Java 还提供了一个更加轻量级的实现 volatile,在上一章介绍 CAS 时我们也说过,volatile 能够保证多线程环境下的可见性与防止指令重排序带来的问题。 先从硬件说起 前面文章已经介绍了硬件结构与 JMM 这里我们自回顾以下。 因为内存读写的速 阅读全文
posted @ 2020-01-08 17:18 当年明月123 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 1. 前置知识 事务: 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任意一个执行失败,将导致整个事务的回滚。简单来说就是提供一种”要么什么都不做,要不全都做“的机制。 本地事务: 当事务是由资源管理器本地 阅读全文
posted @ 2020-01-07 19:56 当年明月123 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 分布式锁 1 什么是分布式锁? 在讨论分布式锁之前,我们先假设一个业务场景: 1.1 业务场景 在电商系统中,用户购买商品需要扣减库存,一般扣库存有两种方式: 下单减库存 优点:用户体验好,下单成功,库存直接扣减,用户支付不会出现库存不足。 缺点:用户一直不付款,这个商品的库存就会被占用,其他人无法 阅读全文
posted @ 2020-01-07 19:49 当年明月123 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 解决线程安全问题,除了上面的 Synchronized 锁之外还有另外一个应用特别广泛的知识点 CAS,可以说 JUC 包完全是建立在 CAS 的基础之上的。 定义 CAS,compare and swap ,是计算机科学中一种实现多线程原子操作的指令,它比较内存中当前存在的值和外部给定的期望值,只 阅读全文
posted @ 2020-01-06 19:35 当年明月123 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 前两篇文章已经介绍了多线程以及 JMM,我们说过多线程面对的安全问题体现在 `可见性 重排序`三个问题上。Synchronized 就是 Java 为我们提供的解决线程安全问题的一把锁。 以前我们都叫它重量级锁,是因为以前它的性能相比与其他锁要差很多,而且非常笨重。但是随着 JDK 1.6 中对 S 阅读全文
posted @ 2020-01-06 18:31 当年明月123 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 前言 在并发变成中,我们需要关注两个问题: 1. 线程之间如何通信。 2. 线程之间如何同步。 线程之间通信指的是线程之间如何交换信息。线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写 读内存中的公共状态来隐式进行通信。 在消息传递的 阅读全文
posted @ 2020-01-05 20:13 当年明月123 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 目的 这一系列的博文的目的是帮助自己对多线程的知识做一个总结,并且将 Java 中的多线程知识做一个梳理。尽量做到全面和和简单易懂。 概念 进程与线程 进程是操作系统级别的, 进程是操作系统分配资源的基本单位 ,一个进程可以包含多个线程,线程共享进程的资源。 线程是 CPU 调度的基本单位 。 为什 阅读全文
posted @ 2020-01-05 14:14 当年明月123 阅读(276) 评论(0) 推荐(0) 编辑
摘要: @[toc] 前言 MyBatis 是一个非常优秀的持久层应用框架,目前几乎已经一统天下。既然是持久层框架,那么一定是对于数据库的操作,Java 中谈到数据库操作,一定少不了 JDBC。那么 MyBatis 比传统的 JDBC 好在哪那?MyBatis 又在哪方面做了优化那? JDBC 如果我们需要 阅读全文
posted @ 2020-01-01 21:49 当年明月123 阅读(2864) 评论(0) 推荐(0) 编辑
摘要: 如果说前面几章是函数式编程的方法论,那么 Stream 流就应该是 JAVA8 为我们提供的最佳实践。 Stream 流的定义 Stream 是支持串行和并行操作的一系列元素。流操作会被组合到流管道中(Pipeline)中,一个流管道必须包含一个源(Source),这个源可以是一个数组(Array) 阅读全文
posted @ 2020-01-01 21:26 当年明月123 阅读(515) 评论(0) 推荐(1) 编辑
摘要: 目前大部分的 JAVA8 的教程一上来就给大家将 Lambda 表达式,方法引用,给大家搞得云里雾里,最终导致 JAVA8 学习的不是特别透彻。我们先来了解一下什么时候能用 Lambda 表达式,然后在探究怎么用 Lambda 表达式。 从函数式编程开始 前一章节我们说过,JAVA8 其实是 Jav 阅读全文
posted @ 2020-01-01 11:13 当年明月123 阅读(1454) 评论(1) 推荐(1) 编辑