随笔分类 - Java
摘要:sychronized 是一个关键字,ReentrantLock 是一个类 sychronized 会自动的加锁与释放锁,ReentrantLock 需要程序员手动加锁与释放锁 sychronized 的底层是JVM层面的锁,ReentrantLock 是API层面的锁 sychronized 是非
阅读全文
摘要:对象的组成结构 在java对象中,一个对象的组成元素有:对象头、实例数据、对齐填充位。 其中实例数据就是我们定义的属性、方法等,对齐填充位是因为java中设定每个对象的大小必须是8bit的倍数,当不足时对齐填充位用于留空填充。 而在对象头中,存储着对象在运行期间的相关信息,组成元素包括: 标记位(M
阅读全文
摘要:两个概念 1、锁队列 所有需要竞争同步锁的线程都会放在锁队列中,比如当前对象的锁已经被一个线程得到,则其他线程都需要在这个锁队列中进行等待,当前面的线程释放同步锁后,锁队列中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待CPU资源分配。 2、等待队列(wait方法) 在调用wait()
阅读全文
摘要:目录1. 前言2. JdbcTemplate基本介绍3. 增删改操作3.1 使用Update方法3.2 批量操作 -- batchUpdate方法4. 查询操作4.1 queryForInt返回一个int整数4.2 queryForObject返回String4.3 queryForMap返回一个M
阅读全文
摘要:HashMap基础 【注意】以下内容只是针对 JDK1.8 HashMap继承了AbstractMap类,实现了Map,Cloneable,Serializable接口。 其使用 hash 算法来决定元素的存储,hash 表包含如下属性。 容量(capacity):hash 表数组的大小,默认为16
阅读全文
摘要:序列化机制允许将实现序列化的 Java 对象转换成字节序列,保存在磁盘上,或者通过网络传输,以备以后重新恢复成原来的对象。 序列化(Serialize):将一个 Java 对象写入 IO 流中; 反序列化(Deserialize):从 IO 流中恢复该 Java 对象。 在 Java 中,让某个对象
阅读全文
摘要:在 Java IO 流体系中提供了近 40 个类,这些类看起来非常乱又没有规律,所以我之前一直很抵触 IO 流,我觉得太乱了。但是在写代码的时候呢,又会经常要去使用,而且经常又用错... 所以这次花时间去重新复习了一遍,经过总结发现我们日常使用到的 IO 流其实就那几个,就能满足我们的日常需求,在这
阅读全文
摘要:NIO 实现多人聊天室的案例 服务端 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.*; import java.
阅读全文
摘要:在使用 BufferedReader 读取输入流中的数据时,如果没有读到有效数据,程序将在此出阻塞该线程的执行(使用 InputStream 的 read() 方法从流中读取数据时,如果数据流中没有数据,它也会阻塞该线程)。也就是说,传统的输入流、输出流都是阻塞式输入、输出。 从 JDK 1.4 开
阅读全文
摘要:Java常用的日志框架介绍 1996年早期,欧洲安全电子市场项目组决定编写它自己的程序跟踪API(Tracing API)。经过不断的完善,这个API终于成为一个十分受欢迎的Java日志软件包,即Log4j。后来Log4j成为Apache基金会项目中的一员。 期间Log4j近乎成了Java社区的日志
阅读全文
摘要:Java程序在运行时都会出现两种类型:编译时类型和运行时类型。 例如代码:Person p = new Student(); 变量 p 的编译时类型为 Person,而运行时类型为 Student。 这些变量编译时类型和运行时类型不一致的,程序员需要在运行时发现对象和类的真实信息,解决这个问题有两种
阅读全文
摘要:在程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来对该类进行初始化。如果没有意外,JVM 将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。 类的加载 类加载指的是将类的 class 文件读入内存,并为之创建一个 java.lang.Cl
阅读全文
摘要:泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参将在声明变量、创建对象、调用放法事动态地指定。 泛型存在的一个好处就是,如果我们不小心使用了其他非指定类型参数,在编译时期就能提醒。 泛型接口 public interface List<E> { //在该接口中,E可作为任意类型使用 v
阅读全文
摘要:注解的定义 注解(Annotation)是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。 通过注解,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。 需要注意的是,Annotation 仅仅的标记作用,不影响程序代码的执行,无论增加、删除 Anno
阅读全文
摘要:ThreadLocal 是什么 ThreadLocal 不是一个线程,而是保存线程本地化对象的容器。 当运行于多线程环境的某个对象使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程分配一个独立的变量副本。 所以每个线程可以独立地改变自己的副本,而不会影响其他线程
阅读全文
摘要:1. 介绍一下Atomic 原子类 Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 所以,所谓原子类说简单点就
阅读全文
摘要:Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 mai
阅读全文
摘要:1. 线程基本概念 1.1 线程与进程 当一个程序进入内存运行时,即变成一个进程。进程是系统进行资源分配和调度的一个独立单元。 线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。 归纳起来说就是:操作系统可以同时执行多个任务,每个任务就是进程;而进程也可以同时执行多个任务,每
阅读全文