摘要: 使用克隆可以为我们快速地构建出一个已有对象的副本,那么什么是浅克隆和深克隆?如何实现克隆? 浅克隆(Shadow Clone)是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对象的地址是 阅读全文
posted @ 2020-07-05 09:08 帅气的码农 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 在并发编程中有两个重要的概念:线程和锁,多线程是一把双刃剑,它在提高程序性能的同时,也带来了编码的复杂性,对开发者的要求也提高了一个档次。而锁的出现就是为了保障多线程在同时操作一组资源时的数据一致性,当我们给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。那么如何手 阅读全文
posted @ 2020-07-05 08:42 帅气的码农 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 在 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) 编辑
该文被密码保护。 阅读全文
posted @ 2020-06-23 17:01 帅气的码农 阅读(0) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-04-20 13:29 帅气的码农 阅读(0) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-01-15 18:00 帅气的码农 阅读(92) 评论(0) 推荐(0) 编辑