摘要:
一、CountDownLatch1.1 概述 让一些线程阻塞直到另外一些完成后才被唤醒。 该类主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被阻塞。其他线程调用 countDown方法计数器减1(调用countDown方法时线程不会阻塞),当计数器的值变为0,因调用 await 阅读全文
摘要:
一、公平锁与非公平锁1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁。 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象。饥饿现象就是低优先级的线程可能一直拿不到锁,而一直处于等待状态 阅读全文
摘要:
一、List1.1 模拟多线程环境 多线程环境下,会抛出 java.util.ConcurrentModificationException 异常 1 public static void listNotSafe() { 2 List<String> list = new CopyOnWriteAr 阅读全文
摘要:
一、CAS 是什么? CAS(Compare And Swap),比较并交换,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的。 1 public class CASDemo { 2 public static void main(Strin 阅读全文
摘要:
一、什么是 volatile ? volatile 是 Java 中的一个关键字,Java 虚拟机提供的轻量级同步机制。二、JMM(Java Memory Model) 为了更好的理解 volatile 关键字,应该了解了解 JMM。 JMM(Java内存模型Java Memory Model,简称 阅读全文
摘要:
一、当是 POST 请求时:在 web.xml 中添加字符编码过滤器: 1 <filter> 2 <filter-name>characterEncodingFilter</filter-name> 3 <filter-class>org.springframework.web.filter.Cha 阅读全文
摘要:
一、标记 - 清除算法(Mark - Sweep) 标记 - 清除算法分为“标记”和“清除”两个阶段: 首先标记出需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程也就是判断对象是不是垃圾对象,可以参考之前的文章 -- 判断对象是否存活https://www.cnblogs.com/ 阅读全文
摘要:
一、异常如下控制台日志:严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.sp 阅读全文
摘要:
一、引用的定义 JDK 1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但太过狭隘,一个对象在这种定义下只有被引用和没有被引用两种状态,对于一些“食之无味,弃之可惜”的对象显得无能 阅读全文
摘要:
一、Java 堆 Java 堆(Heap)是 Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。这个内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。但随着 JIT 编译器的发展与逃逸技术逐渐成熟,栈上分配、标量替换优化技 阅读全文