Java基础知识
吃睡玩
吃睡玩
展开
-
ThreadLocal源码分析
文章转载自并发容器之ThreadLocal详解 ThreadLocal简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此即让多个线程间达到隔离的状态,这样就不会出现线程安全的问题。事实上,这就转载 2020-09-09 21:45:46 · 209 阅读 · 0 评论 -
HashMap源码分析(JDK12.0.2)
1、HashMap的由来 提到存储数据,我们首先会想到数组,然而数组一旦确定其长度就不可变化,所以将数组封装成了类ArrayList(线性表)。ArrayList虽然对外提供了增删改查等操作,但是由于其内部还是数组,因此增加和删除的操作效率并不高。为了提高增删的速度,链表诞生了,然而链表数据结构在内存空间并不是连续的,所以其查询速度较慢。而HashMap内部是哈希表结构,采用数组+链表+红黑树(JDK1.8新增红黑树)的方式,使其既有数组的特点(查询速度较快),又有链表的特点(增删速度较快),因此HashM原创 2020-08-30 10:30:22 · 143 阅读 · 0 评论 -
LinkedList源码分析(基于JDK12.0.2)
与ArrayList类似,LinkedList也是一种常用的集合类,本文将结合源码来分析LinkedList的工作原理。 不同于ArrayList,LinkedList内部维护了一个双向的链表,每个节点如下代码所示: private static class Node<E> { E item; //本节点存储的数据对象 Node<E> next; //尾指针,指向该节点的下一个节点 Node<E> prev; /原创 2020-08-26 17:16:58 · 121 阅读 · 0 评论 -
ArrayList源码分析(基于JDK12.0.2)
ArrayList是Java集合框架中一个很重要的类,开发时如果不知道要用什么集合类那就可以使用ArrayList(当然最好还是要熟知每个集合类的特点和应用场景),因为它的适用性最高,能满足大部分的需求。本文将从源码的层面上分析ArrayList的工作原理。 ArrayList的几个重要字段 //默认的容量 private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA =原创 2020-08-24 17:18:27 · 107 阅读 · 0 评论 -
Java字符串知识点总结
1、String的创建 1.1、普通创建方式和new关键字创建的区别 String最常用的创建方式就是: String a = "abcd"; 使用这种方式创建字符串时,jvm首先会在字符串常量池中检查是存在该字符串,如果有则将该对象的地址赋给它的引用a;若不存在则jvm会在常量池中创建这个字符串对象并将地址赋给a。还有一点需要明确:字符串一经过创建就不会改变。在这个基础上加入: a = "xxx"; 虽然a被指向了xxx,但是原来的abcd却没有变,只是jvm又在常量池中创建了新的xxx,然后让a指向原创 2020-07-07 12:23:06 · 317 阅读 · 0 评论