摘要: 在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。 那么 阅读全文
posted @ 2020-07-04 22:38 帅气的码农 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开 ThreadPoolExecutor。线程池不允许使用 Executor 阅读全文
posted @ 2020-07-04 22:10 帅气的码农 阅读(408) 评论(0) 推荐(1) 编辑
摘要: 线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。 线程的状态在 JDK 1.5 之后以枚举的方式被定义在 Thread 的源码中 阅读全文
posted @ 2020-07-04 21:48 帅气的码农 阅读(692) 评论(0) 推荐(0) 编辑
摘要: HashMap 底层是如何实现的?在 JDK 1.8 中它都做了哪些优化? 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的组成结构如下图所示: 数组中的元素我们称 阅读全文
posted @ 2020-07-04 18:00 帅气的码农 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用于存 阅读全文
posted @ 2020-07-04 17:18 帅气的码农 阅读(296) 评论(0) 推荐(0) 编辑