自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 ScheduledThreadPoolExecutor中定时周期任务的实现源码分析

ScheduledThreadPoolExecutor是一个定时任务线程池,相比于ThreadPoolExecutor最大的不同在于其阻塞队列的实现首先看一下其构造方法:public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFacto...

2020-01-07 16:18:01 292

原创 RocketMQ中PullConsumer的消息拉取源码分析

在PullConsumer中,有关消息的拉取RocketMQ提供了很多API,但总的来说分为两种,同步消息拉取和异步消息拉取同步消息拉取以同步方式拉取消息都是通过DefaultMQPullConsumerImpl的pullSyncImpl方法:private PullResult pullSyncImpl(MessageQueue mq, SubscriptionData subscript...

2019-08-13 16:21:01 349

原创 RocketMQ中PullConsumer的启动源码分析

通过DefaultMQPullConsumer作为默认实现,这里的启动过程和Producer很相似,但相比复杂一些【RocketMQ中Producer的启动源码分析】DefaultMQPullConsumer的构造方法:public DefaultMQPullConsumer(final String consumerGroup, RPCHook rpcHook) { this.co...

2019-08-13 00:03:27 364

原创 RocketMQ中Broker的HA策略源码分析

Broker的HA策略分为两部分①同步元数据②同步消息数据同步元数据在Slave启动时,会启动一个定时任务用来从master同步元数据if (role == BrokerRole.SLAVE) { if (null != slaveSyncFuture) { slaveSyncFuture.cancel(false); } this.slaveSy...

2019-08-08 07:41:20 282

原创 RocketMQ中Broker的刷盘源码分析

上一篇博客简单提了下CommitLog的刷盘 【RocketMQ中Broker的启动源码分析(二)】CommitLog有两种刷盘实现:public enum FlushDiskType { SYNC_FLUSH, ASYNC_FLUSH}同步和异步,同步刷盘由GroupCommitService实现,异步刷盘由FlushRealTimeService实现,默认采用异步刷...

2019-08-07 00:35:07 239

原创 RocketMQ中Broker的消息存储源码分析

Broker和前面分析过的NameServer类似,需要在Pipeline责任链上通过NettyServerHandler来处理消息【RocketMQ中NameServer的启动源码分析】实际上就通过前面提到的SendMessageProcessor的processRequest方法处理【RocketMQ中Broker的启动源码分析(一)】SendMessageProcessor的proc...

2019-08-06 07:46:01 230

原创 RocketMQ中Broker的启动源码分析(二)

接着上一篇博客 RocketMQ中Broker的启动源码分析(一)在完成准备工作后,调用start方法:public static BrokerController start(BrokerController controller) { try { controller.start(); String tip = "The broker[" + ...

2019-08-05 06:00:14 810

原创 RocketMQ中Broker的启动源码分析(一)

在RocketMQ中,使用BrokerStartup作为启动类,相较于NameServer的启动,Broker作为RocketMQ的核心可复杂得多【RocketMQ中NameServer的启动】主函数作为其启动的入口:public static void main(String[] args) { start(createBrokerController(args));}首先通...

2019-08-04 06:26:14 895

原创 RocketMQ中NameServer的启动源码分析

在RocketMQ中,使用NamesrvStartup作为启动类主函数作为其启动的入口:public static void main(String[] args) { main0(args);}main0方法:public static NamesrvController main0(String[] args) { try { NamesrvControl...

2019-08-02 22:38:55 312

原创 RocketMQ中Producer消息的发送源码分析

上篇博客介绍过Producer的启动,这里涉及到相关内容就不再累赘了【RocketMQ中Producer的启动源码分析】Producer发送消息,首先需要生成Message实例:public class Message implements Serializable { private static final long serialVersionUID = 8445773977080...

2019-08-02 18:31:14 1252

原创 RocketMQ中Producer的启动源码分析

RocketMQ中通过DefaultMQProducer创建ProducerDefaultMQProducer定义如下:public class DefaultMQProducer extends ClientConfig implements MQProducer { protected final transient DefaultMQProducerImpl defaultMQProd...

2019-07-31 03:10:30 881

原创 Netty服务端的启动源码分析

ServerBootstrap的构造:public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, ServerChannel> { private static final InternalLogger logger = InternalLoggerFactory.getInstance(Se...

2019-06-03 18:21:30 178

原创 Netty中的ChannelFuture和ChannelPromise

在Netty使用ChannelFuture和ChannelPromise进行异步操作的处理这是官方给出的ChannelFutur描述 * | Completed successfully | * +---------------------...

2019-06-03 05:43:02 1073

原创 Netty中的ChannelPipeline源码分析

ChannelPipeline在Netty中是用来处理请求的责任链,默认实现是DefaultChannelPipeline,其构造方法如下:private final Channel channel;private final ChannelFuture succeededFuture;private final VoidChannelPromise voidPromise;final A...

2019-06-02 14:42:17 288

原创 Netty中FastThreadLocal源码分析

Netty中使用FastThreadLocal替代JDK中的ThreadLocal 【JAVA】ThreadLocal源码分析,其用法和ThreadLocal 一样,只不过从名字FastThreadLocal来看,其处理效率要比JDK中的ThreadLocal要高在类加载的时候,先初始化了一个静态成员:private static final int variablesToRemoveInde...

2019-06-02 02:58:50 319

原创 Netty中NioEventLoopGroup的创建源码分析

NioEventLoopGroup的无参构造:public NioEventLoopGroup() { this(0);}调用了单参的构造:public NioEventLoopGroup(int nThreads) { this(nThreads, (Executor)null);}继续看到双参构造:public NioEventLoopGroup(int nThre...

2019-05-30 17:37:16 288

原创 【Java】NIO中Selector的select方法源码分析

上一篇博客说过了Selector的创建在Windows下默认生成WindowsSelectorImpl对象,那么Selector的select方法使用的就是WindowsSelectorImpl的select方法,而在WindowsSelectorImpl下并没有覆盖这个方法,而是由其基类SelectorImpl实现的:public int select() throws IOException...

2019-05-19 18:26:54 2723 7

原创 【Java】NIO中Channel的注册源码分析

不管是在服务端还是客户端,Channel的注册是在SelectableChannel中定义的:public abstract SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException; public final SelectionKey regis...

2019-05-17 13:18:17 793 3

原创 【Java】NIO中Selector的创建源码分析

在使用Selector时首先需要通过静态方法open创建Selector对象public static Selector open() throws IOException { return SelectorProvider.provider().openSelector();}可以看到首先是调用SelectorProvider的静态方法provider,得到一个Selec...

2019-05-16 01:06:59 486 1

原创 【Java】ServiceLoader源码分析

ServiceLoader主要的功能是用来完成对SPI的provider的加载。先看下它的成员:public final class ServiceLoader<S> implements Iterable<S> { private static final String PREFIX = "META-INF/services/"; // T...

2019-05-15 19:52:49 273

原创 java邮件发送工具

最近在web项目中,客户端注册时需要通过邮箱验证,服务器就需要向客户端发送邮件,我把发送邮件的细节进行了简易的封装:在maven中需要导入:<!--Email--><dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId>...

2019-05-01 18:35:36 452

原创 【JAVA】ThreadLocal源码分析

ThreadLocal内部是用一张哈希表来存储:static class ThreadLocalMap { static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ ...

2019-04-17 17:27:10 251

原创 【Java】Properties文件的解析

public abstract class ReadProperties { public ReadProperties() {} /** * 回调函数,由调用者处理 * @param key * @param value */ public abstract void dealKeyAndValue(String key, String value); /**...

2019-04-17 15:03:19 234

原创 【Java】模拟Sping,实现其IOC和AOP核心(二)

接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP。简易的IOC框图注解的方式实现了左边的分支,那么就剩下右边的XML分支:XmlContext:这个类是也是AbstractApplicationContext的子类,和AnnotationContext相似,只不过这里是要解析XML文件而不是注解:(关于XML文件的解析之前给过一篇博客:【J...

2018-10-29 17:35:09 168

原创 【Java】模拟Sping,实现其IOC和AOP核心(一)

在这里我要实现的是Spring的IOC和AOP的核心,而且有关IOC的实现,注解+XML能混合使用!参考资料:IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Look...

2018-10-29 14:45:45 189

原创 【Java】HashMap源码分析—put、get、resize方法详解

上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()resize()首先介绍resize()这个方法,在我看来这是HashMap中一个非常重要的方法,是用来调整HashMap中table的容量的,在很多操作中多需要重新计算容量。源码如下:final Node&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;K,V&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp

2018-10-11 22:11:49 569

原创 【Java】HashMap源码分析——基本概念

在JDK1.8后,对HashMap源码进行了更改,引入了红黑树。在这之前,HashMap实际上就是就是数组+链表的结构,由于HashMap是一张哈希表,其会产生哈希冲突,为了解决哈希冲突,HashMap采用了开链法,即对于用hash值计算哈希表数组下表时,当出现相同情况时,会在相同的地方追加造成链表的形式。对于分布均匀的情况下,仅仅是一个一维数组,查询起来时间复杂度时O(1),当,分布不均匀的时...

2018-10-07 14:17:48 313

原创 【Java】HashMap中的tableSizeFor方法

在HashMap中数据是存储在哈希表中的,实际上就是一个一维数组,而哈希表的大小总是是二的整数幂,这是因为在HashMap的resize()方法也就是扩容中,对于其所形成的链表的移动是以当前哈希表数组的下标值加上原来数组长度作为扩容后的数组下标,那么其最大取值就是原来数组的两倍大小,又因为其默认的初始大小是16,故该哈希表的大小总是2的整数幂。所以在HashMap中给出了一个计算大于等于当前数值的...

2018-10-07 00:00:10 2227

原创 【Java】用注解实现分发器

在Spring中,可以通过包扫描,找到带有注解的类和方法,通过反射机制进行注入;接下来会仿照这种模式,简单模拟其原理,完成核心效果:类标识的注解,只有带有该标识,才进行之后方法的扫描,否则不进行:import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.an...

2018-10-05 18:18:09 1257

原创 【Java】包、jar包的扫描

package com.test.package_scanner.core;import java.io.File;import java.io.FileFilter;import java.io.IOException;import java.net.JarURLConnection;import java.net.URISyntaxException;import java.ne...

2018-10-05 15:43:15 691

原创 【Java】XML文件的解析

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import jav...

2018-10-05 15:10:25 208

原创 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简单分析动态二维数组,若有不足或错误之处,还请指出!在讲这之前,以一维数组为例,先重新认识一下数组:int array[5] = {1, 2, 3, 4, 5};首先数组名称是该数组的首地...

2018-07-01 03:11:49 790

原创 C语言中关于形参与实参关系

2018-06-02 23:53:56 1635

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除