
Java系列
文章平均质量分 58
java基础及底层刨析
渐入佳境o
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java-动态代理原理
1.什么是代理模式?1.例子1.例子在了解Java动态代理技术之前,先了解一下什么是代理模式,其实代理模式在生活中很常见,比如房东与中介其实就是一个代理的过程,房东有自己的房子,在代理模式中扮演角色是被代理对象,中介扮演角色是代理对象,此时有租客想租房子,由于中介已经代理了房东的房子,所以租客(客户端)可以直接通过中介(代理对象)询问自己需要的房子类型(忽略租客直接找房东),中介由于代理了房东的房子(被代理对象),当然中介可以代理多个房东的房子,以应对不同的租客(客户端).这 个过程其实就是代理模式原创 2021-10-02 05:22:45 · 219 阅读 · 0 评论 -
对Lombok的一些个人见解
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。-百度百科首先做Java开放的相信都已经对这个插件很熟悉了,他不仅会自动帮我们生产实体类的get/set方法,同时他还有更强大的功能,他除了自动生成get/set方法外还支持建造者模式、链式编程,而且只需要添加一个注解@Builder(toBuilder = true)就可以使用建.原创 2020-06-08 17:49:01 · 345 阅读 · 0 评论 -
java自旋锁的实现及其分析
自旋锁是指一个线程尝试获取某个锁是,如果该锁已经被其他线程占用了,就一直循环检测锁释放被释放,而不是像互斥锁一样让线程进入挂起或者睡眠状态。自旋锁的的缺点就是会一直死循环一直到获取锁为止,这样会一直消耗cpu内存,但是与互斥锁把线程阻塞,然后再次被唤醒相比在性能方面还是有优势的,因为频繁的从用户态切到内核态,需要消耗系统资源,性能也更惨,但是目前的jvm对synchronized实现做了修改采用...原创 2020-03-22 12:03:35 · 736 阅读 · 0 评论 -
初步了解ForkJoin分支合并框架
看一下类图Fork/Join是java在1.7之后加入的一个并行计算框架,他采用了分治的思想,把一个大任务分成若干个小任务,并子任务又有可能进行进行拆分,最后计算完成后进行结果合并,整个过程是递归的过程。Fork是将一个任务进行拆分成子任务,子任务进行计算,Join则是把子任务计算的结果,进合并。实例package jdk8;import java.util.concurrent.E...原创 2020-03-20 20:35:55 · 189 阅读 · 0 评论 -
线程池的使用和原理分析
首先看一下类图线程池的执行流程线程池整个流程:创建线程池,开始等待请求调用execute()方法添加一个请求任务时,线程池会判断如果正在运行的线程数雄安与核心线程数,那么会创建线程运行这个任务如果正在运行的线程数大于或者等于核心线程数,则将这个任务放入队列中如果这个队列满了,而且线程数论小于最大线程数,则创建非核心线程执行任务如果队列满了,而且正在运行的线程数也大于或者等...原创 2020-03-20 20:19:51 · 210 阅读 · 0 评论 -
Java中CAS的的简单了解和使用
CAS(Compare And Swap)比较并交换,是一个无锁算法,是一种乐观锁,采用cas可以实现线程安全问题,CAS一般有三个值,内存值,预期原值,新值,只有当内存值与预期原值相同的时候才能进行修改,如果不相同的时候,是无法进行修改操作的。JUC包下的原子类操作全部是使用CAS实现的,包括并发容器,线程池等很多也采用CAS来保证原子性操作。但是CAS也有几个问题:首先ABA问题,循环太久...原创 2020-03-18 16:55:49 · 320 阅读 · 0 评论 -
FutureTask源码了解
FutureTask分析基于jdk11 但是和1.8有一些小差别先看一下简单使用//静态内部类创建单例线程池 -利用了类机制 static class SinglePool{ public static ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 50, 2000, TimeUnit.SECONDS, ...原创 2020-03-18 14:56:25 · 165 阅读 · 0 评论 -
线程的4种创建方式
多线程直接开干不废话,在java中,我们都知道创建线程一般都有两种方法,一种是通过Thread类,一种是实习Runnable接口,这两种都是我们常用的,其实还有几种也可以创建线程。下面重点介绍另外两种。通过Thread类创建线程 static class Thread1 extends Thread{ @Override public void ru...原创 2020-03-18 00:41:36 · 150 阅读 · 0 评论 -
HashMap 源码初次剖析
基于jdk11首先,我们了解一下HashMap的底层结构历史,在JDK1.8之前采用的是数组+链表的数据结构来存储数据,是不是觉得很熟悉,没错这玩意在1.8之前的结构就和HashTable一样都是采用数组+链表,同样也是通过链地址法(这里简称拉链法)来解决冲突,但是HashMap和HashTable的区别是一个是线程安全的,一个是非线程安全的。然后知道jdk1.8出来以后,HashMap做性能优...原创 2020-03-15 03:37:52 · 367 阅读 · 0 评论 -
深入HashTable 源码分析
### HashTable分析是基于jdk11,但与jdk1.8相差并不大HashTable是一个安全散列集,它是以Key-Value对的形式存储,和HasMap一样它同样也存在哈希冲突的情况,因此HashTable采用了数组+单链表的方式来减少哈希冲突(简称拉链法),此外,它的所有涉及到并发的方法的被synchroniced关键字修饰(即在方法加了同步锁),所以在并发情况下是线程安全的,但...原创 2020-03-13 17:00:01 · 234 阅读 · 0 评论 -
CopyOnWriteArrayList 源码剖析
CopyOnWriteArrayList&CopyOnWriteArraySet由于ArrayList操作并发下非线程安全,因为当一个线程在读,另外一个线程在写这样会造成线程不安全,因此引出了CopyOnWriteArrayList 也叫写时复制集合,而为什么要把CopyOnWriteArraySet也在这里说的主要是这个Set内部大部分是基于CopyOnWriteArrayList实现...原创 2020-03-13 01:26:44 · 551 阅读 · 0 评论 -
深入LinkedList 源码分析-jdk1.8
LinkedList在分析源码之前先分析一下LinkedList的数据结构,首先进入源码看介绍或者看LinkedList的全局变量都可以看到LinkedList是基于双链表实现的,数据存储是存储在节点Node中的下面是数据结构类型的源码:public class LinkedList<E> extends AbstractSequentialList<E> ...原创 2020-03-12 16:35:32 · 199 阅读 · 0 评论 -
Vectory 源码分析
Vectorvector是java很早就出来的一个继承list的子类,基本属于淘汰级别,它与ArrayList相比实现级别相同,但Vector是线程安全的,基本上所有的方法都添加了Synchronized关键字来实现方法级别的同步锁,虽然控制了线程安全但性能也受到了大大的影响先看一下Vector的全局变量、构造方法以及继承那些和实现那些接口//可以看到Vectors和ArrayList一...原创 2020-03-12 02:37:59 · 657 阅读 · 0 评论 -
Collections中的 SynchronizedList 源码阅读
SynchronizedListSynchronizedList是一个基于同步锁实现的List,是Collections工具类里面的一个静态类,与ArrayList相比,它是线程安全的,与Vector相比他性能又要好一些,因为Vector实现同步锁是基于方法级别,而SynchronizedList实现同步锁是在代码级别范围更小,性能更高效。(与其他使用轻量级锁的并发容器相比效率还是比较低,虽然j...原创 2020-03-12 01:57:59 · 396 阅读 · 0 评论 -
ArrayList源码分析 基于jdk1.8
ArrayList由于ArrayList的数据结构是基于数组的形式所以在查找、修改和尾部添加方面很快,但删除和指定位置添加速度比较慢首先看ArraysList的全局变量如下:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, ...原创 2020-03-11 22:42:10 · 264 阅读 · 0 评论