随笔分类 - 手撕源码啊
淦
摘要:Reference 引用类型 抽象父类,java.lang.ref包下 作用: GC时通过GC Root可达性分析+引用类型来判断对象是否应该回收 先上结论 没有被Reference引用的对象默认为强引用 强引用:GC时通过GC Root可达性分析判断,只要被GC Root链路关联则不回收 (顺便说
阅读全文
摘要:fail-fast 快速失败 fail-safe 安全失败 说的是在Iterator遍历的过程中,是不能够修改集合数据的,否则就会抛出ConcurrentModificationException。 看个demo 执行结果 看一下我们第35行抛了异常 ConcurrentModificationEx
阅读全文
摘要:本节重点分析Spring容器启动中 读取配置文件 解析一个个Bean封装成BeanDifinition注入到Map中 完成Bean的实例化过程(注意是实例化,并没有初始化) 本节的重点就是 看到下obtainFreshBeanFactory()这个过程中做的事 源码分析 这一阶段先记住Applica
阅读全文
摘要:从Netty官方给出的example包着手点分析,echo 回声,也就是客户端传什么,服务端传回什么 先从客户端开始看 属性,ip地址,端口号,数据大小之类的 四个写死了的 判断ssl是否为空,来决定是否需要初始化SslContext (可以理解为一些客户端的初始化配置,我们的例子中默认是null)
阅读全文
摘要:从Netty官方给出的example包着手点分析,echo 回声,也就是客户端传什么,服务端传回什么 先从客户端开始看 属性,ip地址,端口号,数据大小之类的 四个写死了的 判断ssl是否为空,来决定是否需要初始化SslContext (可以理解为一些客户端的初始化配置,我们的例子中默认是null)
阅读全文
摘要:从Netty官方给出的example包着手点分析,echo 回声,也就是客户端传什么,服务端传回什么 先从客户端开始看 属性,ip地址,端口号,数据大小之类的 四个写死了的 判断ssl是否为空,来决定是否需要初始化SslContext (可以理解为一些客户端的初始化配置,我们的例子中默认是null)
阅读全文
摘要:画了张图,包含了netty的大部分组件,一些说明在图中标出便于理解 在我的理解看来可以将netty大体分为左右两部分 左半部分可以理解为线程池系列 用来执行具体任务,右半部分可以理解为核心组件系列 包括selector,channel,pipeline及handel,后面会逐个介绍 根据Netty官
阅读全文
摘要:NIO: New IO / Native IO jdk1.4诞生出来的,优化了传统IO的拷贝次数 (重点在 不再需要内核缓冲区,用户缓冲区与JVM内存之间的频繁拷贝 直接创建一块堆外内存,直接映射对应的磁盘物理地址,然后通过虚拟地址缺页中断,切换到内核直接将物理地址加载到堆外内存,一次拷贝都不需要
阅读全文
摘要:盲人摸象盲人摸象 这一篇可能并没有涉及到太多源码层细节实现,而是为了能更好的从概念上理解Spring IOC容器这个框架 前言: 对Spring这个框架稍有熟悉就会了解到 Spring这个框架的功能是啥? 答: IOC+DI 与 AOP IOC+DI是啥意思? 答:控制反转 + 依赖注入 说人话?
阅读全文
摘要:今天透一透java线程池底层 怎么用 创建线程池 官方Executors工具类提供了三种创建方法 (but 阿里开发手册一种都不让用,因为各有弊端 不太适用于当前业务开发 so 让我们自己填参数创建,下边可以分析为啥不让) executor4 就是自己创建线程池 需要参数(核心线程数,最大线程数,超
阅读全文
摘要:BlockingQueue 啊 阻塞队列 JUC下又一重要工具 继承自传统队列Queue 拥有传统队列的属性,特点在于可以设置队列大小,如果队列满了再入队会阻塞,如果队列空了再出队会阻塞。 BlockingQueue是不允许插入null元素的,会直接抛空指针异常。因为插入了null元素 获取元素时无
阅读全文
摘要:研究一下子JUC重要的 ReadWriteLock 原理 老规矩 先上Demo: readWriteLock 同时能创造读锁 和写锁两个锁。 读锁为共享锁,意思是多个线程都可以持有读锁 写锁是独占锁,意思是只能由一个线程持有这把锁 遵循的一个原则: 读锁有人持有了 不能再持有写锁, 写锁如果是自己占
阅读全文
摘要:创建 Semaphore 实例的时候,需要一个参数 permits, 这个基本上可以确定是设置给 AQS 的 state 的, 然后每个线程调用 acquire 的时候,执行 state = state - 1, release 的时候执行 state = state + 1, 当然,acquire
阅读全文
摘要:CyclicBarrier JUC包下 相当于可重复使用的CountDownLauth 之前聊过 CountDownLauth类似一种栅栏,条件每满足一次 state-1 ,state减到0时 打开栅栏释放所有阻塞住的线程 CountDownLautch相当于一次性的栅栏,释放过一次后便无用了。而C
阅读全文
摘要:CountDownLatch 作为JUC并发包下一重要工具 Latch的意思是栅栏,作为一个阀门用来控制多个线程的 常用方法: new CountDownLatch(参数为放开栅栏的条件); countDown(); 条件-1 await(); 条件未达到0则阻塞住,达到0则放开栅栏 两个简单的应用
阅读全文
摘要:java线程的中断,不同于操作系统层面的中断,不是立刻将线程的行动中止,而是设置一种标识位,然后被其他调用方判断并进行处理 线程中断相关操作,在Thread类中操作 线程的中断位默认为false interrupt(); //设置一个线程的中断位为true static interrupted();
阅读全文
摘要:Condition 如图,java.util.concurrent.locks包下,与AQS同级 主要方法就是 await() :使当前持有锁的线程进入等待 (实际上是加入到Condition维护的一个等待队列,然后挂起) signal() : 唤醒等待队列头节点的线程 并加入到阻塞队列去排队抢锁
阅读全文
摘要:先画个大致的假类图 主要的类都在这里,核心就是ReentrantLock的内部类 Sync, FairSync NonfairSync 是Sync的公平锁 非公平锁的实现 Sync继承于AbstractQueueSynchronizer(AQS) 核心功能也都在这 先来分析AQS AQS的核心思想就
阅读全文

浙公网安备 33010602011771号