摘要:
记录日常工作中一些容易被忽视的错误及细节,持续更新...... 一、问题:HashMap<Long, String>中,用get(Integer key)取不到值 1.首先想到Long与Integer的hashCode方法不同,Integer-value Long-(int)(value ^ (va 阅读全文
摘要:
单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 单例模式一般体现在类声明中,单例的类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 适用场合: 需要频繁的进行创建和销毁的对象; 创建对象时耗 阅读全文
摘要:
一、类加载机制 一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用。 JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被JVM直接使用的Java类型 阅读全文
摘要:
一、为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数、一年四季等。或者是在我们编译前就知道其包含的所有值的集合。 利用 public final static 完全可以实现的功能,为什么要使用枚举? (1)安全性。这种模式不是类型安全的。比如说我们设计一个函数,要求 阅读全文
摘要:
先做总结: 1、HashMap HashTable ConcurrentHashMap HashMap:线程不安全 HashTable:线程安全,每个方法都加了 synchronized 修饰。类似 Collections.synchronizedMap(hashMap) 对读写加锁,独占式,一个线 阅读全文
摘要:
需要在理解线程池原理的基础上学习定时任务:Java并发(二十一):线程池实现原理 一、先做总结 通过一个简单示例总结: 1、概述 new一个线程池,等待队列是DelayedWorkQueue,将Runable放入队列中,到时间会被线程池取出执行 2、如何实现任务到时间被自动取出? 延时队列Delay 阅读全文
摘要:
一、总览 线程池类ThreadPoolExecutor的相关类需要先了解: (图片来自:https://javadoop.com/post/java-thread-pool#%E6%80%BB%E8%A7%88) Executor:位于最顶层,只有一个 execute(Runnable runnab 阅读全文
摘要:
JVM垃圾回收机制过程 回收算法 垃圾回收器 阅读全文
摘要:
ThreadLocal是一个本地线程副本变量工具类。 主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成操作的场景。 读写锁ReentrantReadWriteLock 记录线程持有的读锁数量时 阅读全文
摘要:
final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。 一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 一、final变量 final成员变量表示常量,只能被赋值一次,赋值后值不再改变(fina 阅读全文
摘要:
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存 阅读全文