![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java进阶
CLthinking
这个作者很懒,什么都没留下…
展开
-
从字节码层面彻底弄清Java类的初始化顺序
下面这个顺序是网上大部分的说法:对于没有继承关系的类,初始化顺序为:静态变量->静态初始化块->实例变量->实例初始化块->构造器。(静态变量与静态初始化块的初始化只会执行一次)。对于有继承关系的类,初始化顺序为:父类静态变量->父类静态初始化块->子类静态变量->子类静态初始化块->父类实例变量->父类实例初始化块->父类构造方法-&g...原创 2019-04-11 13:27:17 · 308 阅读 · 0 评论 -
构造任意多个HashCode相同的字符串
在Java中字符串的HashCode的实现如下(JDK8) public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i &l...原创 2019-04-12 09:58:41 · 2052 阅读 · 1 评论 -
基于wait/notify的阻塞队列
阻塞队列与普通的队列的区别就是当队列为空或者满时处理的逻辑不通,普通队列返回特殊值(比如null,false等等)而阻塞队列是阻塞当前线程直到队列有元素或者不为空。 下面我们使用Java中的wait/notify方法来实现一个自己的阻塞队列。 首先定义阻塞队列的接口: public interface BlockingQueue<E>{ /** * 往队列尾部...原创 2019-05-19 16:57:49 · 424 阅读 · 0 评论 -
Zero-Copy 性能测试(基于Java,windows平台)
在网络编程的过程中,难免需要将静态文件通过socket发送出去,例如服务器端需要将客服端请求的文件发送出去,使用传统的read/write的过程如下: 可以看到,在read/write的过程中,一共涉及到四次copy以及四次内核态与用户态之间的切换: 在这个过程中文件的经历了4次copy的过程: 首先,调用read时,文件拷贝到了kernel模式;调用read从user模式切换到kern...原创 2019-05-13 10:22:38 · 734 阅读 · 0 评论 -
自己写的一些Util类
刷LeetCode题目时,有时候可能会在本地机器上测试代码有没有bug,比如在刷链表的题目时,我们需要自己生成一个链表,或者打印链表。今天把这些功能抽取了出来,写了一个ListUtil类,方便在本地测试。主要的方法是根据数组生成一个链表,或者生成随机链表(大小,链表元素的上下值都可以指定)打印一个链表。 下面看代码: import java.security.SecureRandom; p...原创 2019-05-26 16:37:38 · 609 阅读 · 0 评论 -
ThreadLocal 源码深入分析
ThreadLocal--见名知意,线程本地变量,每个线程都有一个独立的副本,我们来看看JDK文档里面是怎么描述这个类的: This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one ...原创 2019-08-03 23:28:46 · 178 阅读 · 0 评论 -
Java一行代码实现原生数组与包装数组之间的转换
不知道你是否被这样的问题困扰过,就是包装数组与原生数组之间的转换,比如说int[]与Integer[]之间的转换。当然写一个for循环是可以完美解决这个问题的,但是有时候总是感觉得不偿失。 比如说:我有一个List里面收集了一些整数值,但是最终我想返回一个int[],怎么办呢?这里我想是有两种办法的: 1、new 一个int[],然后写一个for循环依次赋值即可。 2、使用t...原创 2019-08-01 21:57:47 · 1196 阅读 · 0 评论