JUC源码学习之AbstractQueuedSynchronizer

源码基于的Oracle JDK版本为:11.0.5什么是CLH队列简单理解是一个双向链表,链表中存放的是包含线程在内的信息,队首的是正在执行的线程,后面的是等待执行的线程,如下图所示:Node概述The wait queue is a variant of a "CLH" (Cr
阅读更多

关于String与常量池的问题

面试必问题吧,但是好像还有一个比较容易漏的地方。总体的流程,搞清楚执行此代码后,他们的结果是什么,以及为什么就差不多算理解了。String a1 = new String("ab");System.out.println(a1 == a1.intern());//falseStr
阅读更多

Java中的注解与Spring中的常用注解

在Spring中,有很多的注解,比如@Controller、@Service什么的。之前对注解的了解不够,在使用SSM时,在想到底什么是注解,它的工作原理又是什么或者说它是怎么工作的,为什么注解了之后就能达到某个功能呢?带着这样的一个疑问,开始探索之旅吧!常见的Java内置的注解以及源代码@Over
阅读更多

Java多线程系列(1)对一个多线程同步代码的分析

注意synchronized关键字使用的是实例锁即可。即m1()与m2()是按照某个次序执行,所以在m1()中,一定会输出b = 1000。至于主线程中的输出,则需要考虑执行顺序。package basic.multithread;public class TestSync2 implements
阅读更多

Java中的NIO学习笔记

流与块的比较原来的 I/O 库(在 java.io.*中) 与 NIO 最重要的区别是数据打包和传输的方式。正如前面提到的,原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。面向流 的 I/O 系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。
阅读更多

try、catch、finally与return的执行顺序问题

finally一定会执行return以最后一次为准return后的finally是否修改了数据,得看具体类型try{} catch(){}finally{} return按照正常的顺序执行:有错会执行catch,finally都会执行,最后执行return。 private static in
阅读更多

ArrayList源代码分析

此篇主要解析 ArrayList 的源码处理逻辑继承关系几个有意思的参数// 默认初始容量private static final int DEFAULT_CAPACITY = 10;// 共享空数组private static final Object[] EMPTY_ELEMENTDATA =
阅读更多

利用自定义线程池解决OOM问题

从Camera获取到了byte[]类型的图像数据之后,需要送到so库中,让so库进行相应的处理,并对其处理的结果进行相应的反馈;1s大概有30帧的数据,但是除去一些装载数据的事件,时间就变大了,实际可拿到的帧率就变小了;在此每秒取5帧,每张图片大致1~3M。这大致就是解决这个问题的背景框架。起因处理
阅读更多