
Java Tech
Young.Chen
关于我的一切 https://chenjiayang.me/about
展开
-
图文解析 Nacos 配置中心的实现
图文解析 Nacos 配置中心的实现本文不会贴太多源码,基本靠图片和文字叙述全文共 2582 字,预计阅读时间 12 分钟什么是 NacosNacos 是阿里发起的开源项目,地址:https://github.com/alibaba/nacos。Nacos 主要提供两种服务,一是配置中心,支持配置注册、变更下发、层级管理等,意义是不停机就可以动态刷新服务内部的配置项;二是作为命名服务...原创 2020-01-17 16:32:13 · 9003 阅读 · 3 评论 -
详解 Java 中的 Wait 和 Notify 机制
写在前面Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到。大家或多或少知道些背景知识,例如二者均为 Object 类的方法,而不是 Thread 特有的(因为锁是每个对象都具有的特性,因此操作锁的方法也紧跟对象,没毛病),且都只能在同步代码块中调用(即前提是先获得对象的监视器锁,一般来说在 synchronized 代码块中使用),否则抛出异常 Illeg...原创 2019-02-26 20:09:42 · 2709 阅读 · 1 评论 -
Thread setUncaughtExceptionHandler
setUncaughtExceptionHandler 用于获取线程运行时异常线程在执行时是不能抛出 checked 异常的,IDE 只会提示你用 try-catch 包裹起来。因此主线程无法直接获取子线程的线程信息,而每个 Thread 可以通过 setUncaughtExceptionHandler 注册一个回调接口setUncaughtExceptionHandlerpublic cl...原创 2019-03-01 19:50:25 · 1877 阅读 · 0 评论 -
基于 “不可变类” 实现一个线程安全的 Integer 计数器
ImmutableIntegerCounter// final 修饰,不能继承public final class ImmutableIntegerCounter { // final 修饰,不允许其他线程对其更改 private final int initial; public ImmutableIntegerCounter(int initial) { ...原创 2019-02-28 19:52:03 · 566 阅读 · 0 评论 -
用 Wait 和 Notify 实现 “生产者-消费者” 模型
生产者-消费者模型import java.util.LinkedList;import java.util.concurrent.TimeUnit;public class ProducerConsumer { public static void main(String[] args) throws InterruptedException { final i...原创 2019-02-27 20:11:36 · 475 阅读 · 0 评论 -
ThreadPoolExecutor 核心源码深度解析
本文只介绍 ThreadPoolExecutor 源码的关键部分,开篇会先介绍 ThreadPoolExecutor 中的一些核心常量定义,然后选取线程池工作周期中的几个关键方法分析其源码实现。其实,看 JDK 源码的最好途径就是看类文件注释,作者把想说的全都写在里面了。一些重要的常量ThreadPoolExecutor 内部作者采用了一个 32bit 的 int 值来表示线程池的运行状态(...原创 2019-02-04 20:00:29 · 449 阅读 · 0 评论 -
Java基础知识总结:Java 常见的垃圾收集器总结
从 Java 到 Golang,垃圾收集器几乎成为现代语言的标配,让编码人员可以从手动释放内存的繁琐中彻底解放出来,提高了编码效率,那么在 Java 中你知道有哪些常见的垃圾收集器么,它们经历了怎样的演进呢?实际上,垃圾收集器并非是统一的,它和具体的 JVM 实现相关,本文主要谈谈最主流 的 Oracle JDK。从年代上来说,收集器可以按照其工作的不同年代区间分为新生代收集器和老年代收集器,再...原创 2019-01-22 19:44:39 · 319 阅读 · 0 评论 -
Java基础知识总结:基础数据类型和包装类
int 是 Java 的八个基础数据类型(boolean、byte 、short、char、int、foat、double、long)之一,Integer 则是其包装类型。需要注意的是,基础数据类型并不是对象,它们的包装类才是。包装类的缓存Integer 源码中存在IntegerCache 这个结构,其实就是缓存,缓存的范围为-128 ~ 127 之间,下面的代码中后者就使用到了缓存机制。I...原创 2019-01-27 14:32:32 · 251 阅读 · 0 评论 -
Java基础知识总结:接口vs抽象类、重写vs重载
我觉得面试就真不该问这种问题,不了解的同学建议去看看 JDK 集合类的源码,对接口和抽象类的理解会更深刻。接口接口是方法的集合,不同的实现类可以去实现这个接口中的方法,因此有点像抽象类里的抽象方法,但是和抽象方法不同的是,接口更加通用,规定了一整套行为(例如java.util.List),而抽象方法往往是规定了该抽象类里的某种行为。抽象类抽象类的作用大多是抽取多个 Java 类的通用逻辑,...原创 2019-01-27 14:05:06 · 337 阅读 · 0 评论 -
Java基础知识总结:Java里四种引用类型的作用和区别
对这个知识点不要去死记硬背,要知道 Java 为什么要有不同的引用类型,它们存在的意义是什么?其实之所以划分不同的引用类型,主要作用体现在划分对象不同的可达性和 GC 对对象回收的影响。四种引用类型分别为强引用,软引用,弱引用和虚引用。所谓强引用,就是我们最常见的普通对象引用,我们 new 出来的对象就是强引用,只要尚且存在强引用指向某一个对象,那就能表明该对象还存活,GC 不能去回收这种...原创 2019-01-27 13:47:04 · 2339 阅读 · 0 评论 -
Java基础知识总结:一文讲透 Exception 和 Error 的差别
Exception 和 Error 都是继承自 Throwable 类,只有 Throwable 类型的实例才可以被抛出( throw )或者捕获( catch )。ErrorError 是指在程序的非正常错误,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态,因为无法预知,所以不便于也不需要捕获,Error 的例子有 OutOfMemoryError 等,...原创 2019-01-27 13:35:29 · 267 阅读 · 0 评论 -
Java基础知识总结:深入浅出Java线程池
ThreadPoolExecutorJava 中线程池的核心类为 ThreadPoolExecutor,它有五个具体的参数:如果以下的文字解释你看的实在头疼,推荐你看看这种 图解线程池的文章corePoolSize:核心线程数,最初为 0,接收一个任务创建一个直到数目增长至 corePoolSize 为止,类似于 lazyinit 的形式,之后核心线程也不会被回收,而是一直以这个数目稳定...原创 2019-01-31 18:48:10 · 376 阅读 · 0 评论 -
Java基础知识总结:常见的负载均衡算法
单机压力过大促使架构向集群模式转变,那么对于请求必定需要一个分发器进行任务分配和流量权衡,业界一般习惯于叫“负载均衡器”,但其实它的作用不仅仅在于平衡机器间的压力,还在于如何更智能的选择任务分发策略,并在一定时候提供降级等保护措施,总之对负载均衡器的理解不能局限在表面意思上。本文谈谈常见的负载均衡算法,也是初级程序员面试中大概率出现的问题。轮询意思很简单,对台机器组成的集群,前置的负载均衡器...原创 2019-01-23 19:55:32 · 1073 阅读 · 0 评论