源码
文章平均质量分 88
码炫课堂-码哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《Java源码分析》:CountDownLatch
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。Latch:闭锁。原创 2024-12-25 16:15:52 · 351 阅读 · 0 评论 -
《Java源码分析》:Exchanger
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。Exchanger类用于两个线程之间交换数据。原创 2024-12-25 16:14:47 · 425 阅读 · 0 评论 -
《Java源码分析》:Semaphore
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。Semaphore 是一个计数信号量。从概念上讲,信号量维护了一个许可集。原创 2024-12-25 07:53:43 · 897 阅读 · 0 评论 -
《Java源码分析》:CyclicBarrier
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-25 07:52:30 · 970 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之ArrayBlockingQueue
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-25 07:51:08 · 606 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之LinkedBlockingQueue
1、链表节点E item;容量边界,如果没有指定,则为Integer.MAX_VALUE当前队列中存储元素的数量队列的头结点,且始终head.item=null,即此头结点不存储任何元素。队列的尾结点,且始终last.next=null.take操作时所需要加的锁7、当take操作时如果队列中存储的元素为空,则调用此Condition的await方法。8、put操作时所需要加的锁和Condition。原创 2024-12-25 07:49:53 · 948 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之PriorityBlockingQueue
1)、默认容量2)、最大容量3)、这个数组代表的是一个平衡二叉堆,即queue[n]的子节点为queue[2n+1]和queue[2*(n+1)]4)、优先队列中的元素个数5)、比较器,如果为空,则为自然顺序6)、锁//为空时,进行阻塞的Condition/***/7)、优先队列:主要用于序列化,这是为了兼容之前的版本。只有在序列化和反序列化才非空PriorityBlockingQueue类中共有3个构造方法,如下。原创 2024-12-25 07:48:46 · 1071 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之PriorityQueue
PriorityQueue类相关属性介绍1、默认容量2、最大容量3、二叉堆//基于二叉堆来实现优先队列,queue[i]的子节点为queue[2*i+1]/queue[2*i+2];4、优先队列元素个数5、比较器,优先队列中的元素就是按照此比较器进行排序。PriorityQueue类相关构造函数介绍1)、创建一个优先队列对象,默认大小为11,队列中的元素按照自然顺序排序。2)、创建一个指定大小的优先队列对象,队列中的元素按照自然顺序排序。原创 2024-12-25 07:46:24 · 892 阅读 · 0 评论 -
《Java源码分析》:Future、RunnableFuture、FutureTask
..//获取任务的返回结果Future中的get方法获取结果时里面的内部实现是什么呢?下面一起来看看/***/if (s原创 2024-12-24 07:43:46 · 739 阅读 · 0 评论 -
《Java源码分析》:任务拒绝策略
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。在没有分析线程池原理之前先来分析下为什么有任务拒绝的情况发生。原创 2024-12-24 07:42:12 · 841 阅读 · 0 评论 -
《Java源码分析》:线程池 ThreadPoolExecutor
既然是线程池,先看下线程是如何被创建出来的。/**/Thread接口中只有一个newThread方法用于产生一个线程。其默认实现类为DefaultThreadFactory类,此类是在Executors类的内部类。//线程池标号//线程组//线程标号//group = (s!= null)?"-thread-";0);//所有线程都默认设置为非Daemon线程//产生的所有线程优先级相同return t;原创 2024-12-24 07:40:33 · 959 阅读 · 0 评论 -
《Java源码分析》:Executors类中创建线程池的几种方法的分析
如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程池。原创 2024-12-24 07:39:09 · 304 阅读 · 0 评论 -
《Java源码分析》:Executor生命周期
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。我们知道线程是有多种执行状态的,同样管理线程的线程池也有多种状态。原创 2024-12-24 07:38:19 · 930 阅读 · 0 评论 -
《Java源码分析》:Executor 以及Executors
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。先看Executor接口,是最根上的接口。原创 2024-12-24 07:37:05 · 761 阅读 · 0 评论 -
《Java源码分析》:Java中synchronized关键字的使用
1、当两个线程Thread1、Thread2访问一个对象obj的synchronized(this)代码块时,每个时刻都只能有一个访问此代码块,当Thread1访问时,Thread2只有在Thread1线程执行完这段代码块并释放锁后取得锁才能访问。2、当两个线程并发时,一个线程访问对象obj的synchronized(this)代码块时,其它的线程可以访问对象obj的非synchronized(this)代码块。原创 2024-12-24 07:36:05 · 765 阅读 · 0 评论 -
《Java源码分析》:Condition
这里又出现了一个条件队列,可能我们就有点晕了,了解AbstractQueuedSynchronizer同步器的都知道,这个类中还维护着一个队列,AQS自己维护的队列是当前等待资源(这里的资源就是锁)的队列,AQS会在资源被释放后,依次唤醒队列中从前到后的所有节点,使他们对应的线程恢复执行。6、待线程2执行完成之后并调用lock.unlock()释放锁之后,会唤醒此时在AQS队列中的头结点.所以线程1开始争夺锁(由于此时只有线程1在AQS队列中,因此没人与其争夺),如果获得锁继续执行。原创 2024-12-24 07:34:03 · 987 阅读 · 0 评论 -
《Java源码分析》:ReadWriteLock(第二部分)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。本篇博文主要介绍了ReentrantReadWriteLock内部实现。原创 2024-12-23 16:44:10 · 1007 阅读 · 0 评论 -
《Java源码分析》:ReadWriteLock(第一部分)
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-23 16:42:48 · 614 阅读 · 0 评论 -
《Java源码分析》:ReentrantLock.unlock 释放锁
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-23 16:40:53 · 622 阅读 · 0 评论 -
《Java源码分析》:ReentrantLock.lock 锁机制
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-23 16:40:02 · 1095 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 ServerSocketChannel
从以上我们可以得到一个结论:只要我们使用channel.register(selector,ops)语句将channel注册到指定的selector上,实际上就是保存到了pollWrapper中,而selector.select()方法实现的逻辑就是遍历这个pollWrapper,看那个通道已经准备好。分析了Selector.open()、selector.select()和channel.register(selector,ops)之后,对Java NIO的机制的原理稍微又更清晰了一点。原创 2024-12-23 16:38:56 · 813 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 ServerSocketChannel SocketChannel
Java NIO中ServerSocketChannel是一个可以监听新进来的TCP 连接的通道。既然是监听新的TCP连接,因此ServerSocketChannel一般用于服务器端,与Socket网络编程中的ServerSocket功能类似。/** 既然是服务器端,肯定需要一个ServerSocketChannel来监听新进来的TCP连接。* *///监听指定的端口号//检测是否有客户端连接进来//在使用完毕后,会进行关闭以上的逻辑基本与Socket编程的服务器一致。原创 2024-12-23 16:37:07 · 611 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 Selector(第一部分Selector.open())
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。关于Selector类主要涉及两个重要的方法,如下:2、select()原创 2024-12-23 08:14:16 · 936 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 Selector(第二部分selector.select())
这个方法的代码还是比较复杂的哈(这次就不详细的对每行代码进行一个分析了哈,以后遇到问题了再详细的来理解分析),但是我们首先要关注一点,就是subSelector.poll()这行代码,这个是一个核心,也就是轮训pollWrapper中保存的FD;由于目前自己从源码的角度只看了Selector.open()方法和selector.select()方法的内部实现。关于selector.select()方法中的脉络就这样的顺了一遍,还是有很多的细节自己由于水平的原因没有理解清楚,如有错误,请批评指正。原创 2024-12-23 08:12:32 · 901 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 SelectionKey
等待写数据的通道可以说是“写就绪”。代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等。在SelectionKey类的源码中我们可以看到如下的4中属性,四个变量用来表示四种不同类型的事件:可读、可写、可连接、可接受连接。以上,我们就简单的看了下SelectionKey类,SelectionKey类简单来说就是一个辅助类,比较简单。原创 2024-12-23 08:11:01 · 445 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 Selector
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-23 08:10:06 · 1071 阅读 · 0 评论 -
《Java源码分析》:Channel and Buffer (通道和缓冲区)
Java NIO的通道类似Java IO中的流。Channel的实现以下是Java NIO中最重要的通道的实现:1、FileChannel:从文件中读写数据2、DatagramChannel:能通过UDP读写网络中的数据。3、SocketChannel:能通过TCP读写网络中的数据。4、ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。下面先通过一个例子来感受下Channel和Buffer。原创 2024-12-23 08:08:23 · 997 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 Buffer
在上篇博文的Demo代码中,我们会看到使用了Buffer中如下几个函数:1、allocate :分配一段空间的Buffer对象2、put :用于往Buffer中添加元素3、flip():用于将写模式转化为读模式4、hasRemaining:判断Buffer中是否还有元素可读5、get():读取Buffer中position位置的元素6、clear() 或者是 compact()方法:清除元素下面我们主要就看下以上几个方法的源代码。原创 2024-12-23 08:06:33 · 910 阅读 · 0 评论 -
《Java源码分析》:LinkedHashMap
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-22 08:50:19 · 755 阅读 · 0 评论 -
《Java源码分析》:TreeMap
TreeMap中相关属性和Entry类的一个介绍//此比较器被用来维持tree map中元素的顺序,如果为null,则用key的自然顺序来进行排序// 根节点// 树中的节点数量//用于记录结构的改变次数TreeMap类中Entry内部类介绍,从Entry类就可以看出,TreeMap是基于红黑树实现的哈。Entry类的代码也比较简单。/***///TreeMap的内部实现结构:红黑树K key;V value;/***/原创 2024-12-22 08:49:01 · 1041 阅读 · 0 评论 -
《Java源码分析》:WeakHashMap和HashMap的区别
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-22 08:47:12 · 951 阅读 · 0 评论 -
《Java源码分析》:HashMap
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-22 08:45:54 · 867 阅读 · 0 评论 -
《Java源码分析》:WeakHashMap
对于所有的容器,添加元素和取得元素是两个最基本的方法。因此,这是我们研究的重点。对于WeakHashMap,添加元素的方法为:V put(K key, V value);根据key取得元素的方法为:V get(Object key)。下面我们将分别详细的介绍这两个方法的原理。3.1、put(K key, V value)介绍此方法的功能为:向WeakHashMap中添加键值对由于WeakHashMap与HashMap基本类似,因此,put方法的思路也基本一致。原创 2024-12-22 08:44:11 · 872 阅读 · 0 评论 -
《Java源码分析》:Hashtable
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。Hashtable类的实现也是基于“数组和链表”来实现的。原创 2024-12-22 08:42:43 · 587 阅读 · 0 评论 -
《Java源码分析》:TreeSet源码分析
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:43:27 · 686 阅读 · 0 评论 -
《Java源码分析》:LinkedHashSet
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:42:38 · 356 阅读 · 0 评论 -
《Java源码分析》:HashSet
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:41:39 · 832 阅读 · 0 评论 -
《Java源码分析》:Stack
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:39:47 · 180 阅读 · 0 评论 -
《JAVA源码分析》:ArrayList
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:38:35 · 615 阅读 · 0 评论 -
《JAVA源码分析》:LinkedList
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-20 07:37:12 · 800 阅读 · 0 评论
分享