04 2020 档案
摘要:1、1.7版本concurrentHashMap ConcurrentHashMap 和 HashMap 的实现原理是差不多的,但是因为 ConcurrentHashMap 是并发安全的,所以在实现上要比hashmap复杂一些。 在 JDK1.7 的实现上,ConrruentHashMap 由一个个
阅读全文
摘要:1、线程池的优势 (1)降低创建线程和销毁线程产生的性能开销; (2)提高响应速度,当有新任务需要执行时不需要等待线程创建就可以马上执行; (3)合理的设置线程池大小可以避免因为线程数超过硬件资源瓶颈造成的问题。 2、线程池Api 线程池返回值ExecuterService,用于管理线程池。 jav
阅读全文
摘要:1、阻塞队列分类 2、阻塞队列原理 基于ReentrantLock和Condition实现阻塞和线程间的通信。 Condition notEmpty = lock.newCondition( ) Condition notFull = lock.newCondition( ) (1)添加元素方法:a
阅读全文
摘要:Condition 1、Condition概述 对于synchronized,可以结合wait/notify实现线程的通信,Condition则是JUC中提供的一个多线程协调通信的工具类,可以让某些线程等待某个条件(condition),只有满足条件时才会被唤醒。 condition.await(
阅读全文
摘要:1、Lock接口的实现——并发包锁 (1)ReentrantLock 重入锁,重入锁指线程在获得锁之后,当该线程再次请求获得该锁不需要阻塞,而是可以直接获得锁,同时计数器增加重入次数。不同线程还是会阻塞的。 (2)ReentrantReadWriteLock 重入读写锁,实现了ReadWriteLo
阅读全文
摘要:1、缓存一致性问题 由于存储设备与处理器的运算速度差距很大,计算机系统在内存与处理器之间增加了一层高速缓存,将运算需要的数据复制到缓存中,让运算能快速进行。 有了高速缓存的存在以后,每个CPU的处理过程是, 先将计算需要用到的数据缓存在CPU高速缓存中,在CPU 进行计算时,直接从高速缓存中读取数据
阅读全文
摘要:jdk1.6之后对synchronized进行了优化,为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁,协调线程安全性和性能的平衡。这种优化主要解决上下文频繁切换,由于Java层面的线程与操作系统的原生线程有映射关系,如果要将一个线程进行阻塞或唤起都需要操作系统的协助,这就需要从用户态切
阅读全文
摘要:1、多线程的实现 * 继承Thread类创建线程,Thread本质上是实现了Runnable接口的一个实例。 * 实现Runnable接口,主要避免java单继承问题,如果一个类已经extends另一个类,就无法再继承Thread,但可以实现Runnable接口来创建线程。 * 实现Callable
阅读全文
摘要:1、JVM参数 分为标准参数和非标准参数。标准参数如:-version,-help。非标准参数有-X和-XX,其中-XX使用最多,主要用于JVM调优和Debug。 * Boolean类型,格式:-XX:[+-]<name>,+或-表示启用或禁用name属性。 如:-XX:+UseG1GC 表示启用G
阅读全文
摘要:1、可回收对象(垃圾)的判定 (1)引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何只针对其引用,它就是垃圾。 弊端:如果AB相互持有引用,会导致永远不能被回收。 (2)可达性分析 通过GC Root的对象,开始向下寻找,看某个对象是否可达 。
阅读全文
摘要:1、虚拟机栈和栈帧 (1)每个线程对应一个虚拟机栈,线程中方法的调用则对应栈中栈帧的入栈和出栈。 栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间。每个栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向运行时常量池的引用(A refe
阅读全文