- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 Java高级 - 多线程锁和同步问题
前言继上一篇Java高级 - 多线程必知必会之后,我们继续聊一下多线程编程中经常会遇到的同步问题以及对应的解决方式。首先提一下内存可见性,因为这个涉及到为什么会出现线程的同步问题。内存可见性这里引用一幅图来说明:引用自: http://concurrent.redspider.group/article/02/6.html由于在Java里面,Java的内存模型规定所有共享变量都存放在主内存中,而每个线程都会把用到的变量从主内存复制到自己的工作内存中。在线程中读写的变量其实都是自己工作内存的
2020-07-20 23:43:47 485
原创 Java高级 - 多线程必知必会
什么是线程在电脑打开任务管理器,我们能看到一个个的进程,这些就是计算机运行中的程序。而线程,则是进程中的一个实体,换句话说,线程是依附进程而存在的。从操作系统的角度来说,线程就是CPU分配的基本单位。从JVM的角度来说,它可以被看作是执行Java代码的最小单位。我们在执行main()方法的时候其实就是启动了一个JVM的进程,而main()方法所在的线程就是这个进程中的主线程。由于线程是进程的一个实体,因此一个进程可以包含多个线程,多个线程之间共享进程的堆和方法区,但是每个线程都有自己的程序计数器和栈。
2020-07-19 10:55:01 237
原创 SpareArray源码解析
什么是SparseArraySparseArray 是 android.util 包下一的一个类SparseArray中文直译过来就是:稀疏数组。顾名思义,这个数组和我们平时用到的Array不太一样。平时我们用到的Array都是按顺序排列的。而SparseArray可以实现间隔排列,也就是说一个大小为10的SparseArray,有可能是这样的[null, null, 1, null ,2, null, null, null, 3, null]。是不是有点神奇?问题 1: 为什么要实现这样一个数组呢
2020-07-08 00:42:18 276
原创 Java源码分析 - HashMap常用方法和扩容算法
前言本文对HashMap(JDK1.8)的源码进行分析,包括以下几个部分:常用方法(put(), get(), containsKey(), containsValue(), remove())内部类(entrySet())底层基本数据结构以及扩容算法解析什么是HashMapHashMap是基于数组扩展实现的通过<K,V> 通过这种键值对映射的方式来存储数据的一种数据结构。因此它具有在O(1)时间查找元素的效率。HashMap有几个基本概念:Hash函数:也称为散列函数,
2020-07-06 00:11:43 451 1
原创 Java源码分析 - LinkedList
什么是LinkedList和ArrayList不同,LinkedList是基于链表实现的线性数据结构。节点之间访问不是通过下标进行,而是通过指针。同时,LinkedList实现了List接口和Deque接口。在Deque接口中提供了许多有用的方法,我们下面会选一些详细说。这是LinkedList里面Node结构(静态内部类): private static class Node<E> { E item; Node<E> next;
2020-07-03 22:22:06 3139
原创 Java源码分析 - ArrayList
ArrayList是什么public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ // ...}继承AbstractList - 说明本身数据结构是列表实现List, RandomAccess, Cloneable, Serializable 这几个接口
2020-07-03 00:34:30 3370
原创 Java基础-枚举
什么是枚举在Java中,我们可以这样定义一个枚举类:public enum Size { SMALL, NORMAL, LARGE}这段代码的意思是:创建一个用来表示尺寸的枚举类,里面有大中小三种不同的尺寸。在代码层面的含义则是:创建了一个枚举类,里面有三个不同的对象。问题1:为什么说是三个不同的对象呢?既然是对象,那么自然就有构造方法了,因此我们也可以这样来定义一个枚举类: public enum Size { SMALL("1"), NORMA
2020-07-01 23:04:15 258
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人