![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程模型
文章平均质量分 65
并发编程模型
燕归来兮_
以梦为码,不负韶华,更多内容欢迎访问 个人博客网站 https://www.zhoutao123.com
展开
-
【并发编程】你知道为什么锁可以保证内存可见性吗?
推荐阅读学习笔记 《 深入理解 Java 虚拟机》学习笔记 《 后端架构设计》学习笔记 《 Java 基础知识进阶》学习笔记 《 Nginx 学习笔记》学习笔记 《 前端开发杂记》学习笔记 《 设计模式学习笔记》学习笔记 《 DevOps 最佳实践指南》学习笔记 《 Netty 入门与实战》学习笔记 《 高性能MYSQL》学习笔记 《 JavaEE 常用框架》学习笔记 《 Java 并发编程学习笔记》学习笔记 《 分布式系统》学习笔记 《 数据结构与算法》Lock的内存语义原创 2020-10-16 09:32:22 · 2729 阅读 · 0 评论 -
【并发编程】你真的知道 final 的内存模型细节吗?
推荐阅读学习笔记 《 深入理解 Java 虚拟机》学习笔记 《 后端架构设计》学习笔记 《 Java 基础知识进阶》学习笔记 《 Nginx 学习笔记》学习笔记 《 前端开发杂记》学习笔记 《 设计模式学习笔记》学习笔记 《 DevOps 最佳实践指南》学习笔记 《 Netty 入门与实战》学习笔记 《 高性能MYSQL》学习笔记 《 JavaEE 常用框架》学习笔记 《 Java 并发编程学习笔记》学习笔记 《 分布式系统》学习笔记 《 数据结构与算法》众所周知,fina原创 2020-10-16 09:28:32 · 105 阅读 · 0 评论 -
【并发编程】天天说Volatile,你知道其内存语义是什么吗?
推荐阅读学习笔记 《 深入理解 Java 虚拟机》学习笔记 《 后端架构设计》学习笔记 《 Java 基础知识进阶》学习笔记 《 Nginx 学习笔记》学习笔记 《 前端开发杂记》学习笔记 《 设计模式学习笔记》学习笔记 《 DevOps 最佳实践指南》学习笔记 《 Netty 入门与实战》学习笔记 《 高性能MYSQL》学习笔记 《 JavaEE 常用框架》学习笔记 《 Java 并发编程学习笔记》学习笔记 《 分布式系统》学习笔记 《 数据结构与算法》volatile的原创 2020-10-16 09:20:46 · 300 阅读 · 0 评论 -
【并发编程】必须要知道的顺序一致性与其内存模型
推荐阅读学习笔记 《 深入理解 Java 虚拟机》学习笔记 《 后端架构设计》学习笔记 《 Java 基础知识进阶》学习笔记 《 Nginx 学习笔记》学习笔记 《 前端开发杂记》学习笔记 《 设计模式学习笔记》学习笔记 《 DevOps 最佳实践指南》学习笔记 《 Netty 入门与实战》学习笔记 《 高性能MYSQL》学习笔记 《 JavaEE 常用框架》学习笔记 《 Java 并发编程学习笔记》学习笔记 《 分布式系统》学习笔记 《 数据结构与算法》顺序一致性内存模型原创 2020-10-16 09:13:14 · 164 阅读 · 0 评论 -
【并发编程】最通俗的话讲解 happens-before 原则
文章目录1、矛盾点2、happens-before 定义3、happens-before 规则4、 总结推荐阅读happens-before是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解 JMM的关键。本章中笔者将用最白话的文字来阐述到底什么是 happens-before 原则以及其作用。1、矛盾点对于开发人员而言,我们希望内存模型易于理解易于编程,因此期待一个强内存模型来实现代码。但对于编译器和处理器而言,其希望内存模型对其束缚越少越好,这样其就可以利用一些手原创 2020-10-14 07:34:46 · 2539 阅读 · 0 评论 -
同步屏障 CyclicBarrier应用以及其原理
文章系列目录 燕归来兮 https://www.zhoutao123.com/page/book/11CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。 它的作用就是会让一组线程叨叨一个屏障点(或者称之为同步点)时被阻塞,知道最后一个线程到达屏障点时候,其他所有被阻塞的线程都会继续运行。举个例子,就像生活中我们会约朋友们到某个景点一起游玩,有些朋友可能会早到,有些朋友可能会晚到,但是这个景点肯定是一起进入检票。所以每个朋友.原创 2020-10-12 09:47:37 · 157 阅读 · 0 评论 -
等待多线程完成 CountDownLatch应用以及原理
CountDownLcatch 允许一个线程或者多个线程等待其他线程操作完成。假设我们有这样的需求,需要解析文件中所有的文件,然后汇总文件信息,此时可以考虑使用多线程,等所有的文件解析完成之后,在进行汇总操作。在这个需求中需要实现主线程等待其他所有线程完成解析操作!简单的方式可以使用join() 方法实现,比如下面的代码中展示了使用join() 实现的逻辑,join() 用于等待线程操作结束。其实现的原理是不断地检查join() 线程是否存活,如果存在则让线程不停地等待,线程终止后,线程的this.no原创 2020-10-12 09:42:08 · 186 阅读 · 0 评论 -
Atomic 更新操作使用案例以及实现原理
上文中介绍了原子化更新的必要性以及其基本实现原理,是使用Unsafe的API记性操作,UNsafe的API 主要是Native级别 的方法,因此,AtomicXXX 基本都是Unsafe类的封装,本篇文章笔者将从实际的类的源码中分析原子类操作的实现方式。1、更新基本类型使用原子类更新基本类型JUC 提供了三种类: AtomicBoolean,AtomicInteger以及AtomicLong。由于这三种基本类型的原理基本类似,笔者这里主要通过AtomicInteger 来分析对于基本类型的原子更新原理。原创 2020-10-12 09:40:52 · 572 阅读 · 0 评论 -
原子更新与Unsafe操作
文章系列目录 燕归来兮 https://www.zhoutao123.com/page/book/11当一个程序需要更新一个变量的时候,如果多个线程同时更新此变量,那么最终的结果可能无法得到预期的结果。比如 多个线程一起自增一个变量,因为线程之间存在本地缓存,那么更新的时候就会出现与预期不一致的结果。Atomic 系列通常我们需要使用Synchronized关键字或者Lock来避免临界区的资源被多个线程同时更新,这样的话可以防止出现上面的情况。但从JDK1.5 开始,JUC 提供了Atomic系列.原创 2020-10-12 09:38:32 · 219 阅读 · 0 评论 -
Frok/Join示例与原理
文章系列目录 燕归来兮 https://www.zhoutao123.com/page/book/111、Fork 与 JoinFork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过 Fork 和 Join 这两个单词来理解下 Fork/Join 框架,Fork 就是把一个大任务切分为若干子任务并行的执行,Join 就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算 1+.原创 2020-10-12 09:35:00 · 269 阅读 · 0 评论 -
Condition 的使用范式以及原理
Condition 的使用范式以及原理文章系列目录 燕归来兮 https://www.zhoutao123.com/page/book/11在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。1、Condition 的构建首原创 2020-10-12 09:32:52 · 624 阅读 · 0 评论 -
可重入锁 ReentrantLock 使用与实现原理
原文链接 https://www.zhoutao123.com/page/book/java/category/qhg7g7更多文章欢迎访问 https://www.zhoutao123.com1、可重入锁与ReentrantLock可重入锁指的是该锁能够在支持在同一个线程下对资源的重复加锁。JDK 提供了ReentrantLock来实现可重入锁,众所周知,Synchronized 是支持可重入锁的,并且是隐式的支持,适用范式如下// 伪代码synchronized(this){ ..原创 2020-07-15 10:31:54 · 225 阅读 · 0 评论 -
AbstractQueueSynchronizer 独占式超时获取同步状态
原文链接 https://www.zhoutao123.com/page/book/java/category/ui8wdw更多文章欢迎访问 https://www.zhoutao123.com通过调用同步器的 public final boolean tryAcquireNanos(int arg, long nanosTimeout) 放,可以实现超时获取同步状态的编程范式模型,即在指定时间内获取到同步状态,超过一定时间返回false,获取同步状态成功则返回true,这是在JDK1.5..原创 2020-07-12 18:18:49 · 157 阅读 · 0 评论 -
AbstractQueueSynchronizer 共享式同步状态获取与释放原理
原文链接 https://www.zhoutao123.com/page/book/java/category/bxc17x更多文章欢迎访问 https://www.zhoutao123.com共享式获取同步状态和独占式获取同步状态主要的区别就是能够在同一时刻有多个线程获取到同步状态。以常见的文件读写实例说明,如果一个线程正在进行写操作,那么这一时刻其他线程的读操作均被阻塞;反之如果一个线程正在进行读操作,其他线程的操作均能正常获取到状态,但是写操作将被阻塞。这个例子中读操作就是共享式访问..原创 2020-07-12 18:17:09 · 130 阅读 · 0 评论 -
AbstractQueueSynchronizer 独占式同步状态的获取与释放原理
原文链接 https://www.zhoutao123.com/page/book/java/category/rcuy1l更多文章欢迎访问 https://www.zhoutao123.com上文中(Lock 与 队列同步器 AbstractQueueSynchronizer) 详细的描述了同步器的模式,自定义同步器的方式以及其底层实现-同步队列,本文将着重讲解独占式同步状态的获取与释放的原理。1、同步状态的获取1.1 从 acquire 方法说起上文中定义的Metux锁中loc..原创 2020-07-12 18:14:53 · 111 阅读 · 0 评论 -
Lock 与 队列同步器 AbstractQueueSynchronizer
原文链接 https://www.zhoutao123.com/page/book/java/category/geqior更多文章欢迎访问 https://www.zhoutao123.com1、Lock 接口的范式以及Synchronized的区别Lock 接口是Java SE 5.0 提供的接口,用于描述定义Java中的锁。一个锁能够防止多个线程同时访问共享的资源(一些特殊的锁除外,比如读写锁)。在Lock接口出现之前,Java程序一般使用Synchronized关键字实现同步操作..原创 2020-07-12 18:13:04 · 110 阅读 · 0 评论 -
多线程的应用-简单实现数据库连接池
原文链接 https://www.zhoutao123.com/page/book/java/category/auraqr更多文章欢迎访问 https://www.zhoutao123.com一些没有经常使用多线程开发的开发者而言,下面的代码可能有点不太容易读懂,主要还是因为不太熟悉这种编程模型,相信各位读者仔细分析代码后,结合代码中注释慢慢分析,如果有不同的地方,欢迎留言。坚持下来,你就会看到不一样的结果!本文章的重点不在于数据库的使用以及数据库连接的创建,本文着重于使用等待-超..原创 2020-07-12 18:10:41 · 443 阅读 · 0 评论 -
多线程的应用-异步任务线程池的简单实现
原文链接 https://www.zhoutao123.com/page/book/java/category/ggccu5更多文章欢迎访问 https://www.zhoutao123.com对于服务端的应用而言,经常会出现比如定时任务,或者任务的异步执行,熟悉Java开发的开发者,经常会使用Executors类,其提供了4种不同的线程池: newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingle..原创 2020-07-12 18:09:32 · 174 阅读 · 0 评论 -
线程之间的通讯机制详解
原文链接 https://www.zhoutao123.com/page/book/java/category/rdz3p6更多文章欢迎访问 https://www.zhoutao123.com各个线程之间相互的独立工作,每个线程都有自己的操作栈以及变量等信息。就像一个团队一样,如果每个人都只做自己的工作,缺少团队成员之间的相互交流,我想这种模式的工作,其价值也是很低的。对于对多线程而言,情况也是类似的,他们同属于某个进程,它们之间应该相互通讯,相互协同,已达到更好的效率实现更复杂的业务..原创 2020-07-12 18:08:09 · 307 阅读 · 0 评论 -
【并发编程】线程的启动与终止使用示例
原文链接 https://www.zhoutao123.com/page/book/java/category/xc8ki9更多文章欢迎访问 https://www.zhoutao123.com1、线程的创建在文章 线程的创建 & 线程优先级 文章中,我们已经了解了线程的创建过程,在运行线程之前,首先需要构建一个线程对象,线程对象需要一些线程的属性: 所属线程组,线程优先级,以及是否是守护线程等等。在创建线程对象完成之后,调用start() 方法就可以启动这个线程。其语句为: ..原创 2020-07-12 18:06:01 · 312 阅读 · 0 评论 -
线程状态以及守护线程
原文链接 https://www.zhoutao123.com/page/book/java/category/ru8i46更多文章欢迎访问 https://www.zhoutao123.com1、线程状态说明Java 的线程在运行阶段会有不同的状态,在Java代码中表现为一个枚举类 Thread.State 其定义如下:public enum State { // 尚未启动的线程状态,一般是创建好的线程尚未调用start() 方法局处于NEW状态 NEW, /..原创 2020-07-12 18:03:49 · 258 阅读 · 0 评论 -
【并发编程】线程创建 & 线程优先级
原文链接 https://www.zhoutao123.com/page/book/java/category/qpg9q1更多文章欢迎访问 https://www.zhoutao123.comJava天然支持多线程,在 java.lang 包实现了一些对多线程支持的类,Thread 以及 Runnable接口,Thread继承了Runnable接口。1、创建线程可以通过继承Thread或者继承Runable来实现多线程,使用start() 方法来启动线程,比如下面的代码// ..原创 2020-07-12 18:02:16 · 268 阅读 · 0 评论 -
【并发编程】进程 与 线程对比说明
原文链接 https://www.zhoutao123.com/page/book/java/category/zu0gw2更多文章欢迎访问 https://www.zhoutao123.comJava 从诞生起就明智的支持多线程。线程作为操作系统的调度的最小单元,多个线程合理的并发执行能够明显的提高程序性能。但是不当的使用多程序或者过多的创建线程也会是程序性能降低。所以学习如何使用多线程是每个开发者都必须要面对的过程。什么是进程?进程是操作系统的基础,是一次的程序执行,是一个程序及..原创 2020-07-12 18:00:45 · 119 阅读 · 0 评论