Java
文章平均质量分 90
鱼儿爱丫头
博学慎思,参天尽物。
展开
-
Java之线程池原理
线程池原理为什么使用线程池?在进行线程池原理叙述之前,首先我们需要知道为什么使用线程池?1、首先我们知道创建或者销毁线程都需要消耗系统资源,使用线程池我们就可以复用已创建的线程。2、其次我们知道线程数量过多会导致资源浪费,从而导致服务器崩溃,所以线程池可以帮助我们控制并发的数量。3、线程池可以对线程做统一的管理。原理从源码中我们可以知道线程池的类是ThreadPoolExecutor,它实现了 Executor接口。其中构造函数有4个,必须参数是5个。首先我们先对必须参数进行描述。publi原创 2021-11-24 16:43:19 · 149 阅读 · 1 评论 -
Java之多线程中的同步与锁
对于顺序一致性模型,指令重排序和三级缓存的概念请参考我的上篇文章Java之多线程 ,这篇文章主要讲述的就是多线程中同步和锁的问题。volatilevolatile主要有2个功能,一个是保证变量的内存可见性,另一个就是禁止变量与普通变量的指令重排序。而JVM是怎么禁止进行重排序的呢?这里就不得不提到一个概念:内存屏障 。什么是内存屏障?从硬件方面来说分为两种,一种是读屏障,一种是写屏障。作用是,第一阻止屏障两侧指令重排序,第二是强制将高速缓冲区中的脏数据刷到主内存中,或者让缓存中相应数据失效,这里的缓存原创 2021-11-18 15:28:26 · 428 阅读 · 0 评论 -
Java之多线程
进程与线程进程是操作系统分配资源的最小单位,是静态的概念。线程是动态的概念,是程序执行的最小单位。一个ALU(算数逻辑单元)同一时间内执行执行一个线程,所以多线程就基于线程切换。线程切换提到线程切换,其实就是每个线程都是在规定的时间内执行,时间到了就需要切换到其他线程执行,这个过程也叫作时间片轮转,而每一次切换的时候都需要保存当前执行线程的状态,如执行到的指令,寄存器状态等,都需要记录到进程中的缓存中,进行上下文的保存,用于再回到这个线程执行时可以继续停止前的状态继续执行。而其实不是线程越多执行效率原创 2021-11-16 15:06:40 · 413 阅读 · 0 评论 -
Java之HashMap原理
HashMap是基于映射(键值对)处理的数据数据结构。是程序员使用的频率最高的数据结构之一,在jdk1.8之后引入红黑树,优化底层数据结构。传统的数据的数据结构是在内存中申请一段连续的内存空间,查询的时间复杂度为O(1),而插入和删除是O(n),因为伴随着数据的移动。...原创 2021-11-07 22:11:56 · 118 阅读 · 0 评论 -
Java之ArrayList与LinkedList
ArrayList的扩容机制1、ArrayList是否未初始化,没有初始化,先初始化,赋值默认容量10。2、判断要插入的下标是否小于当前容量,小于的话直接插入。3、如果所需容量大于当前容量,则进行扩容,扩容为当前容量+当前容量右移一位,即1.5倍。如果扩容之后还是小于所需最小容量,就把所需最小容量给到当前容量,如果容量大于最大容量,那么使用Integer的最大值作为容量,然后拷贝老数组到新数组中。private void grow(int minCapacity) { // over原创 2021-10-17 18:32:47 · 151 阅读 · 0 评论