Java
文章平均质量分 80
Java
Ztrue
这个作者很懒,什么都没留下…
展开
-
【Dubbo】org.apache.dubbo.remoting.RemotingException: message can not send, because channel is closed
记一笔,莫名其妙出现了报错,排查了半天,终于解决了,结果真是有些无语。解决方案1.排查Nacos服务列表中,provider和consumer是否正常注册。未注册,说明你的nacos server或者client的配置有问题2.检查一下自己有没有开代理。我是打开了Clashx, 它把我的本地网络代理掉了。原创 2022-08-24 15:18:54 · 2005 阅读 · 1 评论 -
正则表达式校验非0正数小数点后两位
正则表达式校验非0正数小数点后可保留两位原创 2022-08-04 16:46:17 · 1685 阅读 · 1 评论 -
SpringKafka原理解析及源码学习-Spring生态(一)
Kafka 作为老牌消息中间件, 高吞吐是它的拿手好戏. Spring 的生态中也有官方提供的 spring-kafka.jar. 本文主要学习 Spring 官方提供的 spring-kafka.jar 是怎么实现的.环境下面将本文用到的一些环境版本贴出来, Spring Kafka 在 1.X 版本和 2.X 源码上区别还是挺大的. 本文拉取的是当时的最新版.linux kafka server: kafka_2.13-2.7.0(注: 2.13 是 scala version, 2.7.0原创 2021-07-21 10:24:10 · 5536 阅读 · 1 评论 -
线程池实现原理及源码阅读-Java多线程(十一)
Java 的线程对应着操作系统的线程, 众所周知线程在创建和销毁时都会开销一部分的系统资源, 在高并发的场景下, 将资源浪费在频繁的创建销毁线程显然是不理智的, 在 Java1.5 推出了线程池的概念. 本节为大家介绍线程池实现的基本原理及底层源码阅读.线程池运行机制在学习前需要了解线程池的运行机制, 也就是一个新的线程想要被线程池执行需要经过哪些处理:有空闲的核心线程, 直接交给核心线程处理核心线程数量满了, 则放入阻塞队列期间新来的 task 都会放入阻塞队列, 核心线程监听阻塞队列消费原创 2021-07-16 11:14:38 · 122 阅读 · 2 评论 -
线程池参数及六种实现-Java多线程(十)
当我们使用 new Thread() 创建线程时, 阿里巴巴编程规约强制约束我们放弃这种创建线程的方式, 并推荐我们使用线程池. 本节主要介绍创建线程池的几个参数, 及 Executors 中提供的六种线程池实现.介绍线程池其实只是一种线程使用的模式, 底层还是使用 new Thread() 实现的. 创建了过多的线程会产生严重的调度开销, 进而影响缓存局部性和整体性能. 线程池不仅能够保证内核的充分利用, 还能防止过分调度.线程池参数创建一个自定义线程池需要创建 ThreadPoolExecut原创 2021-07-07 21:05:29 · 135 阅读 · 1 评论 -
AQS等待队列源码学习-Java多线程(九)
AQS (AbstractQueuedSynchronizer) 是由两大核心隐式队列: 阻塞队列和等待队列组成的. 本章就等待队列的源码展开学习讨论.抽象概念等待队列, 又称条件队列(因为 Condition 可以直译为条件). 在 AQS 中等待队列是由内部类 ConditionObject 实现的. 由于 ConditionObject 中许多核心方法, 都是通过调用 AQS 的基础方法来实现的, 所以设计成内部类的形式也比较合理.主要功能等待队列主要功能是: 将竞争到独占资源的线程 A,原创 2021-06-27 19:43:02 · 215 阅读 · 1 评论 -
AQS阻塞队列源码学习-Java多线程(八)
AQS (AbstractQueuedSynchronizer) 是由两大核心隐式队列: 阻塞队列和等待队列组成的. 本章就阻塞队列的源码实现进行讨论.概念入队出队流程阻塞队列, 又称同步队列. 是基于静态内部类 Node 实现的一种 CLH 变体队列. 网上很多入队出队流程描述的并不清晰, 正确的流程如下:现有新节点 A (节点与线程一一对应, 可以理解为是一个意思)想要获取资源时, 通过 tryAcquire()/tryAcquireShared() 直接尝试获取, 如果可以, 则立即执行原创 2021-06-26 21:33:45 · 212 阅读 · 1 评论 -
AQS核心原理介绍-Java多线程(七)
AQS (AbstractQueuedSynchronizer) 抽象的队列同步器是 JUC 中的重要实现. AQS 定义了一套多线程访问共享资源的同步器框架, JUC 中许多经典的同步器实现都是基于 AQS 实现. AQS 内部维护了两种隐式的队列: 阻塞队列和条件队列.由于 AQS 实现较为复杂, 这里打算分成三个章节(核心原理, 阻塞队列, 条件队列)为大家介绍, 以便吃透 AQS 的底层原理. 本章为大家介绍的是第一部分核心原理介绍.前置知识AQS 的实现较为复杂, 在学习前希望大家先理解多原创 2021-06-20 21:54:20 · 201 阅读 · 1 评论 -
优雅的实现计算机容量Bit Byte KB等互相转换-Java工具类
日常工作中, 偶尔会遇到计算机容量之间的相互转换. 众所周知计算机的基本存储单位有Bit, Byte, KB, MB, GB, TB等. 这里参考 TimeUnit 实现一套优雅的计算机容量互相转换工具, 并提供一个支持自动升级容量单位的方法.工具类源码https://gitee.com/zture/spring-test/blob/master/demo/src/main/java/cn/diswares/blog/demo/util/StoreUnit.java实现思路创建枚举类 Stor原创 2021-05-28 10:51:18 · 968 阅读 · 0 评论 -
Interrupt中断线程-Java多线程(五)
Interrupt 的其作用是"中断"线程, 但实际上线程仍会继续运行, 这是一个非常容易混淆的概念. Interrupt 的真正作用是给线程对象设置一个中断标记, 并不会影响线程的正常运行测试代码https://gitee.com/zture/spring-test/blob/master/multithreading/src/test/java/cn/diswares/blog/InterruptTests.java测试为了方便理解简介中 interrupt 的概念, 写个 DEMO 测试原创 2021-05-17 21:47:53 · 224 阅读 · 3 评论 -
Volatile保证可见性的原理-Java多线程(四)
volatile可以保证线程可见性且提供了一定的有序性, 但是无法保证原子性. 在 JVM 规定 volatile 关键字执行的前后必须加上 内存屏障. 而真正的底层实现是 LOCK addl 指令锁总线小实验测试项目地址:https://gitee.com/zture/spring-test/tree/master/multithreading/src/test/java/cn/diswares/blog首先做一个小实验.小实验1在一个类声明一个成员变量 a线程 A 死循环读取读取原创 2021-04-30 10:08:28 · 263 阅读 · 0 评论 -
Synchronized锁升级原理-Java多线程(三)
Synchronized 是 Java 中的关键字, 是利用锁的机制来实现同步的. 是Java内置的机制, 是JVM层面的. JDK 1.6 以前synchronized 关键字只表示重量级锁.在 JDK 1.6 开始 ,对锁的实现引入了大量的优化, 如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销锁升级流程原图出自水印前置知识锁的特性原子性锁是通过互斥保障原子性的. 所谓互斥, 就是指一个锁一次只能被一个线程持有可见性锁的获得会隐含地包含刷新处理器缓存原创 2021-04-27 00:31:39 · 221 阅读 · 0 评论 -
Java对象的内存布局-Java基础(一)
今天来讲些抽象的东西对象头,JDK 中的 synchronized 锁优化和 JVM 中对象年龄升级等等。要深入理解这些知识的原理,了解对象头的概念很有必要对象内存构成Java 中通过 new 关键字创建一个类的实例对象,对象存于内存的堆中并给其分配一个内存地址在 JVM 中,Java 对象保存在堆中时,由以下三部分组成:对象头(object header): 包括了关于堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息。Java 对象和 JVM 内部对象都有一个共同的对象头格式实原创 2021-04-26 01:12:22 · 236 阅读 · 0 评论 -
SpringBoot 集成 Logback-Logback(一)
Spring Boot 家族中核心 Spring Boot Starter 中集成了 Logback 日志框架.Logback 的作者说: Logback 的目的是成为目前流行的 Log4j 项目的继承者, 填补 Log4j 的空白.让我们一起看看 Logback 到底有什么过人之处.测试项目地址: https://gitee.com/zture/spring-test/tree/master/logbackLogback 的介绍Logback是由log4j创始人设计的另一个开源日志组件.原创 2021-04-25 15:14:51 · 528 阅读 · 0 评论 -
Logback 实战之关键日志快照回溯-Logback(二)
这一节笔者为大家分享一个我在公司项目中遇到的实际案例, 也是对日志使用的一个小拓展.由于笔者所在的公司环境复杂, 有开发环境、测试环境、生产环境等, 且各环境间通信隔离. 而这个项目中某核心算法模块内部实现复杂, 很难直接通过观察 LOG 定位问题所在(源码约5000行, 并且还在开发阶段). 那么就需要解决测试、生产环境环境中算法发生故障后, 可以通过一个简单有效的方案来恢复当时的环境. 将环境在开发环境中可以跑起来, 那这样就可以本地 DEBUG 定位问题项目源码https://gitee.co原创 2021-04-25 15:13:37 · 324 阅读 · 0 评论 -
跟踪JVM源码了解AtomicInteger的底层实现-Java多线程(二)
本节主要讲解在跟踪 JVM 源码. 了解 AtomicInteger 的底层实现.上文提过 AtomicInteger 的实现中关键是调用了 Unsafe.class.compareAndSwapInt() 方法. 在 JDK .class文件反编译后的 Unsafe.class 中能看到 compareAndSwapInt 是用 native 关键字修饰的. 那我们要了解它的实现就必须阅读 JVM 的源码JVMJVM 是一种规范. 在这个规范下有许多实现, 例如:OpenJDKHotspot原创 2021-04-25 15:09:28 · 131 阅读 · 0 评论 -
CAS、ABA 问题讲解-Java多线程(一)
Java 面试中必然会问到有关多线程方面的知识. 本文主要讲解多线程中的基础知识 CAS(Compare And Swap)机制和 ABA 问题.CAS介绍CAS 全称 Compare And Swap, 顾名思义就是比较和改变的意思. 在 Java 中比较常用的实现有 synchronize 的轻量级锁(有的地方也称为无锁、自旋锁可重入锁)、java.util.concurrent.atomic 包下的 Atomic 家族. 这些实现之间有一个共性: 经常配合循环操作,直到完成为止.过程所谓的原创 2021-04-25 15:07:14 · 137 阅读 · 0 评论 -
Java8 Hotspot 源码下载
title: Java8 Hotspot 源码下载tags: Java Hotspot Code Downloaddate: 2021/2/16categories:JavaHotspotkeywords: [Java,Hotspot]description: Java8 Hotspot 源码下载想看 Hotspot 源码的同学. 先去找到 Hotspot源码版本. 比如jdk8u262-ga ,最右边可以找到它的id,就是1c6e1f187fdc,下载地址:http://hg..原创 2021-04-25 15:04:41 · 572 阅读 · 0 评论 -
maven配置私服后Cannot download sources, 无法下载源码
方法一: 执行shell命令(不推荐, 需要每次记录命令)项目根目录下运行以下命令mvn dependency:resolve -Dclassifier=sources方法二: 修改maven配置文件setting.xml私服配置mirrorOf=*的时候, 会优先走这个配置, 导致ali、中央仓库等镜像均不生效<!-- 私服 --><mirror> ...原创 2020-04-26 15:36:27 · 2007 阅读 · 0 评论