0%

Synchronized

基本认知

  • 被用来解决数据共享访问的安全性问题最常见的应用
用法

不同的修饰类型,代表锁的控制粒度

  • 修饰实例方法
    • 作用于当前实例加锁,进入同步代码前要获得当前实例的锁
  • 静态方法
    • 作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
  • 修饰代码块,
    • 指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
阅读全文 »

线程池ThreadPoolExecutor详解

内置四种构造器,但最终重载的是下面的构造函数

1
2
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit
,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
阅读全文 »

线程的出生

众所周知,计算机可以“同时”运行多个进程来执行不同的任务(操作系统通过CPU时间片不断切换执行从而达到宏观上的同时运行。单核CPU在任意一个CPU时间片只会有一个进程在执行),那为什么还需要发明个线程呢?

阅读全文 »

HashMap源码分析

1、实现原理概括

  • HashMap是一个关联数组、哈希表,它是线程不安全的,允许key为null,value为null。遍历时无序

  • 使用拉链法实现哈希表,结合了数组与链表的特点

    • 数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢
    • 链表可动态增加或减少空间以适应新增和删除元素,但查找时只能顺着一个个节点查找,所以增加删除快,查找慢
  • 其底层数据结构是数组称之为哈希桶,每个桶里面放的是链表,链表中的每个节点,就是哈希表中的每个元素;
    在JDK8中,当链表长度达到8,会转化成红黑树,以提升它的查询、插入效率

    • 哈希桶的底层数据结构是数组(数组中每个元素都是链表),所以就会面临着扩容问题
    • 当容量达到threshold域值时,就会触发扩容。扩容前后,哈希桶的长度一定会是2的次方。
      在根据key的hash值寻找对应的哈希桶时,可以用位运算替代取余操作,更加高效。
    • 扩容时,会new个新的Node数组作为哈希桶,然后将原哈希表中的所有数据(Node节点)移动到新的哈希桶中,
      即对原哈希表中所有的数据重新做了个put操作,所以性能消耗很大;在哈希表的容量越大时,性能消耗越明显。
    • 如果发生过哈希碰撞,节点数小于8个。则要根据链表上每个节点的哈希值,依次放入新哈希桶对应下标位置。
    • 扩容是容量翻倍,所以原链表上的每个节点,现在可能存放在原来的下标,即low位,或者扩容后的下标,即high位。
      high位= low位+原哈希桶容量。
  • 而key的hash值,并不仅仅只是key对象的hashCode()方法的返回值,还会经过扰动函数的扰动,以使hash值更加均衡。

    • 扰动函数就是为了解决hash碰撞的。它会综合hash值高位和低位的特征,并存放在低位,因此在与运算时,
      相当于高低位一起参与了运算,以减少hash碰撞的概率。(在JDK8之前,扰动函数会扰动四次,JDK8简化了这个操作)
阅读全文 »

ArrayList

ArrayList适合随机的查找与遍历,数据的插入和删除相对来说较低

  • 内部基于数组实现
  • 可对元素进行快速随机访问
  • 每个元素之间不能由间隔,即数组的空间是连续的
  • 当需要扩容时需要将原数组数据复制到新的存储空间
    • 若在中间插入元素时,需要对数组进行复制,移动操作,代价高
阅读全文 »

Java类加载机制

类加载过程

共有五个过程:

加载-Loading

加载是类加载过程中的一个阶段, 这个阶段会在内存中生成一个代表这个类的 java.lang.Class
象, 作为方法区这个类的各种数据的入口。

阅读全文 »

JAVA虚拟机

概念

  • 是可运行java代码的虚拟机,它包括一套字节指令集,一组寄存器,一个垃圾回收,一个方法存储域,一个栈和一个堆.
  • 它是一种软件,运行在操作系统中,与硬件没有直接交互

运行过程

  • Java源文件通过编译器生成对应的.class字节码文件,而字节码文件通过JVM中加载器和解释器生成对应机器上的机器码,从而通过系统被执行
  • 大致过程如下:
    • Java源文件–->编译器–>字节码文件–->JVM–>机器码
阅读全文 »