E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
muduo网络库源码剖析
浅谈阻塞队列 BlockingQueue
关于阻塞队列,具体写过几篇
源码剖析
的文章。
every__day
·
2021-02-17 10:16
并发编程
BlockingQueue
阻塞队列
offer
take
通俗易懂的JUC
源码剖析
-CyclicBarrier
前言我们知道,CountDownLatch的计数器是一次性的,它不能重置。也就是说,当count值变为0时,再调用await()方法会立即返回,不会阻塞。本文要说的CyclicBarrier就是一种可以重置计数器的线程同步工具类。CyclicBarrier字面意思是“回环屏障”,它可以让一组线程全部到达一个状态后再全部同时往下执行。之所以叫回环是因为当所有线程执行完毕,并重置CyclicBarri
·
2021-02-16 15:44
java
通俗易懂的JUC
源码剖析
-CountDownLatch
前言在实际开发中,有时会遇到这样的场景:主任务需要等待若干子任务完成后,再进行后续的操作。这时可以用join或者本文的CountDownLatch实现。它们的区别在于CountDownLatch更加灵活。比如,子任务的工作分为两个阶段,主任务只需子任务完成第一个阶段即可开始主任务,无需等第二个阶段完成。这种场景join就无法做到,CountDownLatch就可以实现。下面是实例代码。import
·
2021-02-16 15:44
java
通俗易懂的JUC
源码剖析
-CyclicBarrier
前言我们知道,CountDownLatch的计数器是一次性的,它不能重置。也就是说,当count值变为0时,再调用await()方法会立即返回,不会阻塞。本文要说的CyclicBarrier就是一种可以重置计数器的线程同步工具类。CyclicBarrier字面意思是“回环屏障”,它可以让一组线程全部到达一个状态后再全部同时往下执行。之所以叫回环是因为当所有线程执行完毕,并重置CyclicBarri
·
2021-02-16 15:09
java
通俗易懂的JUC
源码剖析
-CountDownLatch
前言在实际开发中,有时会遇到这样的场景:主任务需要等待若干子任务完成后,再进行后续的操作。这时可以用join或者本文的CountDownLatch实现。它们的区别在于CountDownLatch更加灵活。比如,子任务的工作分为两个阶段,主任务只需子任务完成第一个阶段即可开始主任务,无需等第二个阶段完成。这种场景join就无法做到,CountDownLatch就可以实现。下面是实例代码。import
·
2021-02-16 15:37
java
通俗易懂的JUC
源码剖析
-ReentrantLock&AQS
AQS概述大家可能对AQS听得很多,它的全称是AbstractQueuedSynchronizer,即抽象队列同步器,它是JUC包中很多同步组件的基础。先来看看它的类层次以及内部数据结构吧。publicabstractclassAbstractQueuedSynchronizerextendsAbstractOwnableSynchronizerimplementsjava.io.Serializ
·
2021-02-09 01:54
java
通俗易懂的JUC
源码剖析
-StampedLock
StampedLock的作用StampedLock是JDK1.8新增的类,它类似ReadWriteReentrantLock,也有读写锁的功能,它还多了一种乐观读锁,它与ReadWriteReentrantLock的区别在于它是不可重入的,ReadWriteReentrantLock是可重入的。StampedLock有三种模式mode和一个版本号stamp。三种模式:悲观写模式:writeLock
·
2021-02-09 01:54
java
通俗易懂的JUC
源码剖析
-ThreadPoolExecutor
前言ThreadPoolExecutor相信大家都很熟悉:线程池的实现类。今天我们就来看看它内部是怎么实现的。实现原理先来看看它的类结构:publicclassThreadPoolExecutorextendsAbstractExecutorService{}publicabstractclassAbstractExecutorServiceimplementsExecutorService{}p
·
2021-02-09 01:22
java
通俗易懂的JUC
源码剖析
-ThreadPoolExecutor
前言ThreadPoolExecutor相信大家都很熟悉:线程池的实现类。今天我们就来看看它内部是怎么实现的。实现原理先来看看它的类结构:publicclassThreadPoolExecutorextendsAbstractExecutorService{}publicabstractclassAbstractExecutorServiceimplementsExecutorService{}p
·
2021-02-09 01:45
java
通俗易懂的JUC
源码剖析
-StampedLock
StampedLock的作用StampedLock是JDK1.8新增的类,它类似ReadWriteReentrantLock,也有读写锁的功能,它还多了一种乐观读锁,它与ReadWriteReentrantLock的区别在于它是不可重入的,ReadWriteReentrantLock是可重入的。StampedLock有三种模式mode和一个版本号stamp。三种模式:悲观写模式:writeLock
·
2021-02-09 01:45
java
通俗易懂的JUC
源码剖析
-ReentrantLock&AQS
AQS概述大家可能对AQS听得很多,它的全称是AbstractQueuedSynchronizer,即抽象队列同步器,它是JUC包中很多同步组件的基础。先来看看它的类层次以及内部数据结构吧。publicabstractclassAbstractQueuedSynchronizerextendsAbstractOwnableSynchronizerimplementsjava.io.Serializ
·
2021-02-09 01:45
java
源码剖析
sync.WaitGroup(文末思考题你能解释一下吗?)
原文链接:
源码剖析
sync.WaitGroup(文末思考题你能解释一下吗?)
·
2021-02-08 20:29
golangsync并发编程
通俗易懂的JUC
源码剖析
-DelayQueue
前言DelayQueue是BlockingQueue接口的实现类,它是带有延时功能的无界阻塞队列,意思就是每个元素都有过期时间,当从队列获取元素时,只有过期元素才会出队列。队列的头部元素是最快要过期的元素。实现原理先来看看它的类结构:publicclassDelayQueueextendsAbstractQueueimplementsBlockingQueue{}可以看到,存放的元素必须实现了De
·
2021-02-08 00:18
java
通俗易懂的JUC
源码剖析
-DelayQueue
前言DelayQueue是BlockingQueue接口的实现类,它是带有延时功能的无界阻塞队列,意思就是每个元素都有过期时间,当从队列获取元素时,只有过期元素才会出队列。队列的头部元素是最快要过期的元素。实现原理先来看看它的类结构:publicclassDelayQueueextendsAbstractQueueimplementsBlockingQueue{}可以看到,存放的元素必须实现了De
·
2021-02-08 00:01
java
Redis
源码剖析
之数据过期(expire)
我之前统计过我们线上某redis数据被访问的时间分布,大概90%的请求只会访问最新15分钟的数据,99%的请求访问最新1小时的数据,只有不到千分之一的请求会访问超过1天的数据。我们之前这份数据存了两天(近500g内存数据),如果算上主备的话用掉了120多个Redis实例(一个实例8g内存),光把过期时间从2天改成1天就能省下60多个redis实例,而且对原业务也没有啥太大影响。当然Redis已经实
·
2021-02-07 14:11
java
通俗易懂的JUC
源码剖析
-PriorityBlockingQueue
前言PriorityBlockingQueue是BlockingQueue接口的实现类,它是一种优先级阻塞队列,每次出队都返回优先级最高或最低的元素,其内部是用平衡二叉树堆实现的。这里的优先级指的是元素类必须实现Comparable接口,然后用compareTo()方法比较元素的优先级大小,当然也可指定自定义的比较器comparator。实现原理先来看看它的重要属性://队列默认容量为11priv
·
2021-02-06 23:09
java
通俗易懂的JUC
源码剖析
-PriorityBlockingQueue
前言PriorityBlockingQueue是BlockingQueue接口的实现类,它是一种优先级阻塞队列,每次出队都返回优先级最高或最低的元素,其内部是用平衡二叉树堆实现的。这里的优先级指的是元素类必须实现Comparable接口,然后用compareTo()方法比较元素的优先级大小,当然也可指定自定义的比较器comparator。实现原理先来看看它的重要属性://队列默认容量为11priv
·
2021-02-06 23:55
java
net/rpc中一个函数调用的旁白
(源码)net/rpc中一个函数调用的旁白身份介绍正题收益坏处net/RPC
源码剖析
主要名词解释客户端流程讲解:服务端流程讲解:初始化启动从设计模式的角度理解net/rpc源码的设计身份介绍大家好,我的名字叫小
Simonthatsme
·
2021-02-06 12:08
rpc
源码
rpc
go
源码
设计模式
通俗易懂的JUC
源码剖析
-ArrayBlockingQueue
前言ArrayBlockingQueue也是BlockingQueue接口的实现类,从它的命名就能猜出来,它底层是用数组实现的,不同于LinkedBlockingQueue的链表结构。实现原理首先来看它的关键属性://存放元素的数组finalObject[]items;//记录下次take操作的数组位置inttakeIndex;//记录下次put操作的数组位置intputIndex;//数组长度i
·
2021-02-06 02:02
java
通俗易懂的JUC
源码剖析
-ArrayBlockingQueue
前言ArrayBlockingQueue也是BlockingQueue接口的实现类,从它的命名就能猜出来,它底层是用数组实现的,不同于LinkedBlockingQueue的链表结构。实现原理首先来看它的关键属性://存放元素的数组finalObject[]items;//记录下次take操作的数组位置inttakeIndex;//记录下次put操作的数组位置intputIndex;//数组长度i
·
2021-02-06 02:56
java
k8s-client-go
源码剖析
(二)
简介:云原生社区活动---Kubernetes
源码剖析
第一期第二周本周是K8S源码研习社第一期第二周,学习内容是学习Informer机制,本文以这个课题进行展开。
·
2021-02-05 16:39
通俗易懂的JUC
源码剖析
-LinkedBlockingQueue
前言LinkedBlockingQueue实现了BlockingQueue,它是阻塞队列的一种,可用于线程池中。不同于ConcurrentLinkedQueue的CAS非阻塞算法,它底层是用锁实现的阻塞队列。实现原理先来看关键属性://队列容量,最大为Integer.MAX_VALUEprivatefinalintcapacity;//队列长度privatefinalAtomicIntegerco
·
2021-02-05 00:43
java
通俗易懂的JUC
源码剖析
-LinkedBlockingQueue
前言LinkedBlockingQueue实现了BlockingQueue,它是阻塞队列的一种,可用于线程池中。不同于ConcurrentLinkedQueue的CAS非阻塞算法,它底层是用锁实现的阻塞队列。实现原理先来看关键属性://队列容量,最大为Integer.MAX_VALUEprivatefinalintcapacity;//队列长度privatefinalAtomicIntegerco
·
2021-02-05 00:30
java
通俗易懂的JUC
源码剖析
-ConcurrentLinkedQueue
简介ConcurrentLinkedQueue是JUC包下的线程安全的无界非阻塞队列,它与BlockingQueue接口实现类最大的不同就是,BlockingQueue是阻塞队列,而ConcurrentLinkedQueue是非阻塞队列。这里的阻塞非阻塞,指的是队列满了或为空的时候,线程移除或放入元素的时候,是否需要阻塞挂起。BlockingQueue底层是用锁实现的,而ConcurrentLin
·
2021-02-02 23:40
java
通俗易懂的JUC
源码剖析
-ConcurrentLinkedQueue
简介ConcurrentLinkedQueue是JUC包下的线程安全的无界非阻塞队列,它与BlockingQueue接口实现类最大的不同就是,BlockingQueue是阻塞队列,而ConcurrentLinkedQueue是非阻塞队列。这里的阻塞非阻塞,指的是队列满了或为空的时候,线程移除或放入元素的时候,是否需要阻塞挂起。BlockingQueue底层是用锁实现的,而ConcurrentLin
·
2021-02-02 23:26
java
通俗易懂的JUC
源码剖析
-LockSupport
前言LockSupport是rt.jar下的工具类,它的作用是挂起和唤醒线程,它在JUC很多同步组件中都会用到,比如AQS。LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类方法的线程是没有许可证的。LockSupport内部是用Unsafe的park和unpark方法实现的。主要方法(1)voidpark()调用park()方法会阻塞当前线程,
·
2021-01-30 02:09
java
通俗易懂的JUC
源码剖析
-LockSupport
前言LockSupport是rt.jar下的工具类,它的作用是挂起和唤醒线程,它在JUC很多同步组件中都会用到,比如AQS。LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类方法的线程是没有许可证的。LockSupport内部是用Unsafe的park和unpark方法实现的。主要方法(1)voidpark()调用park()方法会阻塞当前线程,
·
2021-01-30 02:33
java
阿里P9枕边书“Java并发实现原理:JDK
源码剖析
”
前言并发编程可选择的方式有多进程、多线程和多协程。对于Java来说,它既不像C++那样,在运行中调用Linux的系统API去“fork”出多个进程;也不像Go那样,在语言层面原生提供多协程。在Java中,并发就是多线程模式。在JDK1.5发布之前,Java只在语言级别上提供一些简单的线程互斥与同步机制,也就是synchronized关键字、wait与notify。如果遇到复杂的多线程编程场景,就需
该用户快成仙了
·
2021-01-27 22:03
java
并发编程
jdk
jdk源码
Java并发实现
通俗易懂的JUC
源码剖析
-ThreadLocalRandom
一、为什么要用ThreadLocalRandom?Random不够用吗?我们对Random可能比较熟悉,随机数生成的常用类。来回顾下Random的用法:Randomrandom=newRandom();//输出一个0~5的随机数(包括0,不包括5)System.out.println(random.nextInt(5));来看下nextInt的源码:publicintnextInt(intboun
·
2021-01-24 16:44
java
Redis
源码剖析
之数据过期(expire)
我之前统计过我们线上某redis数据被访问的时间分布,大概90%的请求只会访问最新15分钟的数据,99%的请求访问最新1小时的数据,只有不到千分之一的请求会访问超过1天的数据。我们之前这份数据存了两天(近500g内存数据),如果算上主备的话用掉了120多个Redis实例(一个实例8g内存),光把过期时间从2天改成1天就能省下60多个redis实例,而且对原业务也没有啥太大影响。当然Redis已经实
·
2021-01-24 16:12
java
通俗易懂的JUC
源码剖析
-ThreadLocalRandom
一、为什么要用ThreadLocalRandom?Random不够用吗?我们对Random可能比较熟悉,随机数生成的常用类。来回顾下Random的用法:Randomrandom=newRandom();//输出一个0~5的随机数(包括0,不包括5)System.out.println(random.nextInt(5));来看下nextInt的源码:publicintnextInt(intboun
·
2021-01-24 16:55
java
源码剖析
panic与recover,看不懂你打我好了!
前言哈喽,大家好,我是asong,今天与大家来聊一聊go语言中的"throw、try.....catch{}"。如果你之前是一名java程序员,我相信你一定吐槽过go语言错误处理方式,但是这篇文章不是来讨论好坏的,我们本文的重点是带着大家看一看panic与recover是如何实现的。上一文我们讲解了defer是如何实现的,但是没有讲解与defer紧密相连的recover,想搞懂panic与reco
·
2021-01-24 11:11
通俗易懂的JUC
源码剖析
-ThreadLocal/InheritableThreadLocal
一、前言多个线程使用共享变量时,如果要保证线程安全,通常会加锁,synchronized或者Lock。但这两种锁都是重量级的,如果多个线程都希望操作各自的变量,彼此间互不影响,那么ThreadLocal就派上用场了,InheritableThreadLocal则是它的功能扩展,后面会分析它的使用场景。二、ThreadLocal实现原理先来看下它的类结构:红色框中的是我们常用的方法,它内部是用Thr
·
2021-01-24 00:29
java
通俗易懂的JUC
源码剖析
-ThreadLocal/InheritableThreadLocal
一、前言多个线程使用共享变量时,如果要保证线程安全,通常会加锁,synchronized或者Lock。但这两种锁都是重量级的,如果多个线程都希望操作各自的变量,彼此间互不影响,那么ThreadLocal就派上用场了,InheritableThreadLocal则是它的功能扩展,后面会分析它的使用场景。二、ThreadLocal实现原理先来看下它的类结构:红色框中的是我们常用的方法,它内部是用Thr
·
2021-01-24 00:14
java
k8s-client-go
源码剖析
(二)
简介:云原生社区活动---Kubernetes
源码剖析
第一期第二周本周是K8S源码研习社第一期第二周,学习内容是学习Informer机制,本文以这个课题进行展开。
·
2021-01-23 14:34
k8s-client-go
源码剖析
(三)
云原生社区活动---Kubernetes
源码剖析
第一期第三周作业,也是最后一周作业.本文主要讲述下client-go中workqueue,看一下client-go的一个整体数据走向.如下图:而workqueue
·
2021-01-23 02:12
通俗易懂的JUC
源码剖析
-CopyOnWriteArrayList
前言众所皆知,ArrayList是线程不安全的,它的所有方法都没有加锁,那么有没有线程安全并且性能高的类呢?那就是CopyOnWriteArrayList实现原理首先来看它的关键数据结构:/**Thelockprotectingallmutators*/finaltransientReentrantLocklock=newReentrantLock();/**Thearray,accessedon
·
2021-01-23 02:40
java
k8s-client-go
源码剖析
(三)
云原生社区活动---Kubernetes
源码剖析
第一期第三周作业,也是最后一周作业.本文主要讲述下client-go中workqueue,看一下client-go的一个整体数据走向.如下图:而workqueue
·
2021-01-23 01:02
通俗易懂的JUC
源码剖析
-CopyOnWriteArrayList
前言众所皆知,ArrayList是线程不安全的,它的所有方法都没有加锁,那么有没有线程安全并且性能高的类呢?那就是CopyOnWriteArrayList实现原理首先来看它的关键数据结构:/**Thelockprotectingallmutators*/finaltransientReentrantLocklock=newReentrantLock();/**Thearray,accessedon
·
2021-01-23 01:30
java
通俗易懂的JUC
源码剖析
-LongAdder/LongAccumulator
大家对AtomicLong应该比较熟悉(如果未接触过,请翻看另一篇博客,通俗易懂的AtomicLong
源码剖析
),但JDK1.8为什么又新增了LongAdder/LongAccumulator2个类?
·
2021-01-22 03:42
java
通俗易懂的JUC
源码剖析
-LongAdder/LongAccumulator
大家对AtomicLong应该比较熟悉(如果未接触过,请翻看另一篇博客,通俗易懂的AtomicLong
源码剖析
),但JDK1.8为什么又新增了LongAdder/LongAccumulator2个类?
·
2021-01-22 03:53
java
k8s-client-go
源码剖析
(一)
首发于2020年8月份,这里重新做一次发布简介:云原生社区活动---Kubernetes
源码剖析
第一期有幸参与云原生社区举办的Kubernetes
源码剖析
活动,活动主要以书籍《Kubernetes
源码剖析
四颗咖啡豆
·
2021-01-20 00:43
golang
后端
k8s
kubernetes
源码分析
k8s-client-go
源码剖析
(一)
首发于2020年8月份,这里重新做一次发布简介:云原生社区活动---Kubernetes
源码剖析
第一期有幸参与云原生社区举办的Kubernetes
源码剖析
活动,活动主要以书籍《Kubernetes
源码剖析
四颗咖啡豆
·
2021-01-20 00:02
golang
后端
k8s
kubernetes
源码分析
React SSR
源码剖析
写在前面上篇ReactSSR之API篇细致介绍了ReactSSR相关API的作用,本篇将深入源码,围绕以下3个问题,弄清楚其实现原理:React组件是怎么变成HTML字符串的?这些字符串是如何边拼接边流式发送的?hydrate究竟做了什么?一.React组件是怎么变成HTML字符串的?输入一个React组件:classMyComponentextendsReact.Component{constr
前端向后
·
2021-01-19 13:17
react.js
ssr
服务端渲染
源码分析
Vue.js
源码剖析
-响应式原理
目标vue.useset,el.data,data,data,el.mount等创建vue实例,初始化好数据后,vue如何渲染到页面的响应式目录根据不同功能把代码拆分不同文件夹(提高可读性可维护性)compiler转换render函数core核心globalApiVue的静态方法instance创建vue实例observer响应式实现(重点讲)vueDom重写了snabdomserver服务端渲染
Jack おう
·
2021-01-19 08:45
vue原理
【待完成】jvm常见面试题汇总
java虚拟机内存管理jvm整体架构jvm运行时内存程序计数器虚拟机栈本地方法栈堆元空间方法区运行时常量池直接内存OOM异常JVM类加载机制类加载系统类加载器双亲委派模型自定义类加载器ClassLoader
源码剖析
垃圾回收机制及算法如何判断对象已经死亡
米兰卡其色
·
2021-01-17 16:25
#
高级用法
面试一次问一次,HashMap是该拿下了(二)
文章目录前言一、HashMap类图二、
源码剖析
1.HashMap(jdk1.8版本)-此篇详解⑴.底层结构(数组+单向链表+红黑树)⑵.构造函数⑶.put()-添加元素方法⑷.get()-获取元素方法⑸
猿医生
·
2021-01-14 16:51
集合源码系列
java
源码剖析
_Spring源码高级笔记——Spring IOC源码深度剖析
SpringIOC源码深度剖析好处:提高培养代码架构思维、深入理解框架原则定焦原则︰抓主线宏观原则:站在上帝视角,关注源码结构和业务流程(淡化具体某行代码的编写细节)读源码的方法和技巧断点(观察调用栈)反调(FindUsages)经验(spring框架中doXXX,做具体处理的地方)Spring源码构建下载源码(github)安装gradle5.6.3(类似于maven)ldea2019.1Jdk
weixin_39548193
·
2021-01-12 22:45
源码剖析
Istio支持多集群
源码剖析
在Istio1.8中多集群支持的演变一文中,我们介绍了4种Istio多集群部署模型,并且简单介绍了单网络Primary-Remote部署模型的部署步骤。今天我们通过对源码分析,来介绍Istio如何支持多集群模式。主要通过istioctl命令和Pilot-discovery源码两部分来讲述,并且基于Istio1.8版本。Istioctl命令Istioctl提供了诸多对于多集群支持的命令。该代码位于i
iyacontrol
·
2021-01-11 11:00
istio
kubernetes
k8s
Redis
源码剖析
之robj(redisObject)
我们在之前的文章中已经了解过一部分Redis的数据结构了,尤其是dict中讲到,可以把redis看做一个hashtable,存储了一堆的key-value,今天就来看下key-value中value的主要存储结构redisObject(后文统称robj)。robj的详细代码见object.c字段详解相对与其他几个数据结构,robj相对简单,因为只包含了几个字段,含义都很明确。typedefstru
xindoo
·
2021-01-11 00:28
java
上一页
22
23
24
25
26
27
28
29
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他