
并发编程
一角钱技术
Java架构师
展开
-
并发编程之ForkJoin框架原理分析
Fork/Join 框架是 Java7 提供了的一个用于并行执行的任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。原创 2020-12-15 18:23:23 · 536 阅读 · 0 评论 -
并发编程之ThreadLocal深入理解
ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量,这样同时多个线程访问该变量并不会彼此相互影响,因此他们使用的都是自己从内存中拷贝过来的变量的副本,这样就不存在线程安全问题,也不会影响程序的执行性能。原创 2020-12-10 23:31:09 · 248 阅读 · 0 评论 -
并发编程之定时任务&定时线程池原理解析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言线程池的具体实现有两种,分别是ThreadPoolExecutor 默认线程池和ScheduledThreadPoolExecutor 定时线程池,上一篇已经分析过ThreadPoolExecutor原理与使用了,本篇我们来重点分析下ScheduledThreadPoolExecutor的原理与使用。《并发编程之Executor线..原创 2020-12-10 09:13:37 · 1739 阅读 · 0 评论 -
并发编程之Executor线程池原理与源码解读
“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此 Java 中提供线程池对线程进行同一分配、调优和监控。原创 2020-12-07 23:34:22 · 325 阅读 · 0 评论 -
并发编程之Phaser原理与应用
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言JDK5中引入了CyclicBarrier和CountDownLatch这两个并发控制类,而JDK7中引入的Phaser按照官方的说法是提供了一个功能类似但是更加灵活的实现。接下来我们带着几个问题来研究一下Phaser与(CountDownLath、CyclicBarrier)到底有哪些类似,同时带来了哪些灵活性?Phaser 是..原创 2020-12-04 00:10:53 · 523 阅读 · 0 评论 -
并发编程之Exchanger原理与使用
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言在JUC包中,除了一些常用的或者说常见的并发工具类(ReentrantLock,CountDownLatch,CyclicBarrier,Semaphore)等,还有一个不常用的线程同步器类 —— Exchanger。Exchanger是适用在两个线程之间数据交换的并发工具类,它的作用是找到一个同步点,当两个线程都执行到了同步点(e..原创 2020-11-30 22:46:55 · 573 阅读 · 1 评论 -
并发编程之CountDownLatch原理与应用
CountDownLatch是一个同步计数器,他允许一个或者多个线程在另外一组线程执行完成之前一直等待,基于AQS共享模式实现的。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作来。原创 2020-11-29 10:48:32 · 544 阅读 · 2 评论 -
并发编程之Semaphore原理与应用
Semaphore 信号量,许可,用于控制在一段时间内,可并发访问执行的线程数量。它的作用是控制访问特定资源的线程数目,底层依赖AQS的状态State,是在生产当中比较常用的一个工具类。原创 2020-11-27 18:17:14 · 264 阅读 · 1 评论 -
JUC之阻塞队列BlockingQueue竟然有8种类型?
抽象队列同步器AQS应用之阻塞队列BlockingQueue8种类型详解原创 2020-11-26 17:18:58 · 508 阅读 · 1 评论 -
阻塞队列 — DelayedWorkQueue源码分析
DelayedWorkQueue 也是一种设计为定时任务的延迟队列,它的实现和DelayQueue一样,不过是将优先级队列和DelayQueue的实现过程迁移到本身方法体中,从而可以在该过程当中灵活的加入定时任务特有的方法调用。原创 2020-11-25 00:06:48 · 944 阅读 · 1 评论 -
阻塞队列 — LinkedBlockingDeque源码分析
LinkedBlockingDeque 一个由于链表结构组成的双向阻塞队列,队列头部和尾部都可以添加和移除元素,多线程并发时,可以将锁的竞争对多降到一半。原创 2020-11-24 11:31:42 · 374 阅读 · 3 评论 -
阻塞队列 — LinkedTransferQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言LinkedTransferQueue 是一个由链表结构组成的无界阻塞传输队列,它是一个很多队列的结合体(ConcurrentLinkedQueue,LinkedBlockingQueue,SynchronousQueue),在除了有基本阻塞队列的功能(但是这个阻塞队列没有使用锁)之外;队列实现了TransferQueue接口重写了..原创 2020-11-23 09:57:57 · 329 阅读 · 0 评论 -
阻塞队列 — SynchronousQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言SynchronousQueue 一个不存储元素的阻塞队列,每一个 put 操作必须等待 take 操作,否则不能继续添加元素。支持公平锁和非公平锁2种策略来访问队列。默认是采用非公平性策略访问队列。公平性策略底层使用了类似队列的数据结构,而非公平策略底层使用了类似栈的数据结构。SynchronousQueue的吞吐量高于Linke..原创 2020-11-22 16:04:26 · 2123 阅读 · 2 评论 -
阻塞队列 — DelayQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言DelayQueue 由优先级支持的、基于时间的调度队列,内部使用非线程安全的优先队列(PriorityQueue)实现,而无界队列基于数组的扩容实现。在创建元素时,可以指定多久才能从队列中获取当前元素。只有延时期满后才能从队列中获取元素。队列创建BlockingQueue<String> blockingQueue..原创 2020-11-21 17:01:32 · 632 阅读 · 0 评论 -
阻塞队列 — PriorityBlockingQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言PriorityBlockingQueue 优先级队列,线程安全(添加、读取都进行了加锁)、无界、读阻塞的队列,底层采用的堆结构实现(二叉树),默认是小根堆,最小的或者最大的元素会一直置顶,每次获取都取最顶端的数据队列创建小根堆PriorityBlockingQueue<Integer> concurrentLin..原创 2020-11-20 17:46:22 · 265 阅读 · 0 评论 -
阻塞队列 — LinkedBlockingQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言LinkedBlockingQueue 由链接节点支持的可选有界队列,是一个基于链表的无界队列(理论上有界),队列按照先进先出的顺序进行排序。LinkedBlockingQueue不同于ArrayBlockingQueue,它如果不指定容量,默认为 Integer.MAX_VALUE,也就是无界队列。所以为了避免队列过大造成机器负载..原创 2020-11-19 18:41:58 · 254 阅读 · 0 评论 -
阻塞队列 — ArrayBlockingQueue源码分析
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言ArrayBlockingQueue 由数组支持的有界阻塞队列,队列基于数组实现,容量大小在创建 ArrayBlockingQueue 对象时已经定义好。 此队列按照先进先出(FIFO)的原则对元素进行排序。支持公平锁和非公平锁,默认采用非公平锁。其数据结构如下图:注:每一个线程在获取锁的时候可能都会排队等待,如果在等待时间上..原创 2020-11-18 23:59:15 · 281 阅读 · 0 评论 -
并发编程之synchronized深入理解
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言并发编程从操作系统底层工作的整体认识开始深入理解Java内存模型(JMM)及volatile关键字深入理解CPU缓存一致性协议(MESI)在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时sy..原创 2020-11-12 22:06:34 · 287 阅读 · 0 评论 -
CPU有缓存一致性协议(MESI),为何还需要volatile
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言并发编程从操作系统底层工作的整体认识开始深入理解Java内存模型(JMM)及volatile关键字前面我们从操作系统底层了解了现代计算机结构模型中的CPU指令结构、CPU缓存结构、CPU运行调度以及操作系统内存管理,并且学习了Java内存模型(JMM)和 volatile 关键字的一些特性。本篇来深入理解CPU缓存一致性协议(..原创 2020-11-11 17:46:05 · 1901 阅读 · 1 评论 -
一文读懂Java内存模型(JMM)及volatile关键字
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言并发编程从操作系统底层工作的整体认识开始上一篇我们从操作系统底层工作的整体了解了并发编程在硬件以及操作系统层面的一些知识,本篇我们继续来学习JMM模型以及Volatile关键字的那些面试必问的一些知识点。什么是JMM模型?Java 内存模型(Java Memory Model 简称JMM)是一种抽象的概念,并不真实存在,它描..原创 2020-11-10 18:01:20 · 530 阅读 · 1 评论 -
并发编程从操作系统底层工作的整体认识开始
点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。前言在多线程、多处理器、分布式环境的编程时代,并发是一个不可回避的问题。既然并发问题摆在面前一个到无法回避的坎,倒不如拥抱它,把它搞清楚,花一定的时间从操作系统底层原理到Java的基础编程再到分布式环境等几个方面深入探索并发问题。先就从原理开始吧。计算机系统层次结构早期计算机系统的层次最早的计算机用机器语言编程,机器语言称为第一代程..原创 2020-10-30 00:38:52 · 392 阅读 · 2 评论