随笔分类 -  JAVA

摘要:【转载】Java并发面试系列:彻底掌握 volatile 关键字原理 什么是 volatile volatile 是 Java 中的一种轻量级同步机制的关键字,当一个变量被 volatile 修饰后,有两层含义: 保证了该变量的修改对所有线程可见 禁止指令重排序优化 另外,volatile 不保证原 阅读全文
posted @ 2023-02-15 10:08 hongdada 阅读(182) 评论(0) 推荐(0) 编辑
摘要:JAVA 双亲委派与类加载器 双亲委派 虚拟机在加载类的过程中需要使用类加载器进行加载,而在Java中,类加载器有很多,那么当JVM想要加载一个.class文件的时候,到底应该由哪个类加载器加载呢? 这就不得不提到”双亲委派机制”。 首先,我们需要知道的是,Java语言系统中支持以下4种类加载器: 阅读全文
posted @ 2023-02-05 15:55 hongdada 阅读(86) 评论(0) 推荐(1) 编辑
摘要:JAVA线程池 submit方法返回值 AbstractExecutorService public abstract class AbstractExecutorService implements ExecutorService { // RunnableFuture 是用于获取执行结果的,我们 阅读全文
posted @ 2023-01-15 15:29 hongdada 阅读(207) 评论(0) 推荐(0) 编辑
摘要:JAVA线程-interrupt 中断一个线程非常简单,只需要在其他线程中对目标线程调用interrupt()方法,目标线程需要反复检测自身状态是否是interrupted状态,如果是,就立刻结束运行。 案例一: public class Main { public static void main 阅读全文
posted @ 2023-01-12 13:46 hongdada 阅读(188) 评论(0) 推荐(0) 编辑
摘要:JAVA并发-Thread.sleep(0)深入理解 Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。 通过调用 Thread.sleep(0) 的目的是为了让 GC 线程有机会被操作系统选中,从而进行垃圾清理的工作。它的副作用是,可能会更频繁地运行 GC,毕竟 阅读全文
posted @ 2022-12-20 15:37 hongdada 阅读(1576) 评论(0) 推荐(0) 编辑
摘要:JAVA并发-Disruptor框架 Disruptor简介 最好的方法去理解Disruptor就是将它和容易理解并且相似的队列,例如BlockingQueue。Disruptor其实就像一个队列一样,用于在不同的线程之间迁移数据,但是Disruptor也实现了一些其他队列没有的特性,如: 同一个“ 阅读全文
posted @ 2022-12-16 21:24 hongdada 阅读(988) 评论(0) 推荐(1) 编辑
摘要:JAVA Unsafe类详解 官方不建议使用Unsafe 使用Unsafe要注意以下几个问题: 1、Unsafe有可能在未来的Jdk版本移除或者不允许Java应用代码使用,这一点可能导致使用了Unsafe的应用无法运行在高版本的Jdk。 2、Unsafe的不少方法中必须提供原始地址(内存地址)和被替 阅读全文
posted @ 2022-12-16 00:05 hongdada 阅读(687) 评论(0) 推荐(0) 编辑
摘要:CPU个数、核数、线程数、JAVA多线程关系 cpu个数、核数、线程数的关系 cpu个数:是指物理上,也及硬件上的核心数; 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数; 线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数【如果有超线程,再乘以超线程数】 cpu线程数和Ja 阅读全文
posted @ 2022-09-23 09:08 hongdada 阅读(1221) 评论(0) 推荐(0) 编辑
摘要:案例: import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import com.fasterxml.jackson.annotation.JsonInclude; import com 阅读全文
posted @ 2022-09-20 14:42 hongdada 阅读(2048) 评论(0) 推荐(0) 编辑
摘要:简介 ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。 Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务” 阅读全文
posted @ 2022-09-20 14:41 hongdada 阅读(1133) 评论(0) 推荐(0) 编辑
摘要:基本概念 指针碰撞 一般情况下,JVM的对象都放在堆内存中(发生逃逸分析除外)。当类加载检查通过后,Java虚拟机开始为新生对象分配内存。如果Java堆中内存是绝对规整的,所有被使用过的的内存都被放到一边,空闲的内存放到另外一边,中间放着一个指针作为分界点的指示器,所分配内存仅仅是把那个指针向空闲空 阅读全文
posted @ 2021-03-10 21:55 hongdada 阅读(827) 评论(0) 推荐(0) 编辑
摘要:JAVA 对象头分析及Synchronized锁 对象内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分: Mark 阅读全文
posted @ 2020-12-04 18:14 hongdada 阅读(5099) 评论(3) 推荐(5) 编辑
摘要:泛型擦除概念 Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦 阅读全文
posted @ 2020-11-17 11:18 hongdada 阅读(5123) 评论(0) 推荐(4) 编辑
摘要:概述 JMH只适合细粒度的方法测试,并不适用于系统之间的链路测试 使用Maven搭建基准测试项目骨架 JMH官方推荐使用Maven来搭建基准测试的骨架,使用也很简单,使用如下命令来生成maven项目: mvn archetype:generate -DinteractiveMode=false -D 阅读全文
posted @ 2020-10-13 17:11 hongdada 阅读(668) 评论(0) 推荐(0) 编辑
摘要:Stream中过滤null的情形 class Customer { private Long id; private String name; public Customer(Long id, String name) { this.id = id; this.name = name; } publ 阅读全文
posted @ 2020-05-28 17:27 hongdada 阅读(232) 评论(0) 推荐(0) 编辑
摘要:简介 SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想:我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块、xml解析 阅读全文
posted @ 2020-03-22 00:38 hongdada 阅读(781) 评论(0) 推荐(0) 编辑
摘要:java文件编译成二进制字节码class文件 class文件再通过类加载器加载到JVM的永久代(jdk8以后就变成了Metaspace元数据,这里说一下,永久代跟元数据都是实现方法区的手段,方法区是一种规范) 应用启动时,通过方法区中类的元信息,静态变量,静态方法(想当于制造对象的说明书)创建对象。 阅读全文
posted @ 2020-03-20 15:50 hongdada 阅读(535) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal结构 下图是本文介绍到的一些对象之间的引用关系图,实线表示强引用,虚线表示弱引用: ThreadLocal的hashcode 在ThreadLocalMap中都需要根据索引i来get,set int i = key.threadLocalHashCode & (len-1); 阅读全文
posted @ 2019-12-27 17:35 hongdada 阅读(2387) 评论(1) 推荐(2) 编辑
摘要:案例 ,这里将会新增两个node 第一轮循环创建一个 ,空节点,线程也为空 第二轮将 加入到队列中,prev指向head 在最后一次release之前,tryAcquireShared会为 1 shouldParkAfterFailedAcquire parkAndCheckInterrupt(阻塞 阅读全文
posted @ 2019-12-24 14:28 hongdada 阅读(700) 评论(0) 推荐(0) 编辑
摘要:源码: 内部类Sync CountDownLatch初始化 private void doAcquireSharedInterruptibly(int arg) throws InterruptedException { final Node node = addWaiter(Node.SHARED 阅读全文
posted @ 2019-12-13 16:07 hongdada 阅读(318) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示