摘要:
Selector是个啥? Selector是Java NIO核心组件中的选择器,用于检查一个或多个Channel(通道)的状态是否处于可读、可写。实现一个单独的线程可以管理多个channel,从而管理多个网络连接。使用一个线程进行处理,也避免了线程上下文切换带来的开销。 而在传统IO模型下,服务器处 阅读全文
摘要:
Channel是个啥? Channel,顾名思义,它就是一个通道。NIO中的所有IO都是从 Channel 开始的。 Channel通道和流非常类似,主要有以下几点区别: 1、流是单向的,通道是双向的,可读可写。 2、流读写是阻塞的,通道可以异步读写。 3、流中的数据可以选择性的先读到缓存中,通道的 阅读全文
摘要:
Buffer是个啥? Buffer 即缓冲区,用来暂存输入输出数据的区域。Buffer对象是一份固定数量的数据的容器,实质上是一个数组。但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问,还可以跟踪系统的读/写进程。 在 Java传统 IO 中,数据直接写入或者将数据直接读到 Strea 阅读全文
摘要:
AQS是个啥? AQS(AbstractQueuedSynchronizer)是Java并发用来构建锁和其他同步组件的基础框架。许多同步类实现都依赖于它,如常用的ReentrantLock/ReentrantReadWriterLock/CountDownLatch等 AQS提供了独占(Exclus 阅读全文
摘要:
在本文讲解之前,先来简单了解一下为什么会有批量重偏向和批量撤销。 批量重偏向:当一个线程创建了大量对象并执行了初始的同步操作,后来另一个线程也来将这些对象作为锁对象进行操作,会导偏向锁重偏向的操作。 批量撤销:在多线程竞争剧烈的情况下,使用偏向锁将会降低效率,于是乎产生了批量撤销机制。 JVM的默认 阅读全文
摘要:
Java对象头的组成 Java对象的对象头由 mark word 和 klass pointer 两部分组成, mark word存储了同步状态、标识、hashcode、GC状态等等。 klass pointer存储对象的类型指针,该指针指向它的类元数据 值得注意的是,如果应用的对象过多,使用64位 阅读全文
摘要:
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 继承关系图 线程的创建方式有很多种。常用的有:继承Thread(),重写该类的run()方法;实现Runnable 阅读全文
摘要:
System.out.println("Hello World")是大部分程序员入门的第一行代码,也可以说是程序员们最熟悉的一行代码。大家真的深入研究过System.out.println()么?今天就来盘一盘System.out.println()! System是个啥? System作为Java 阅读全文
摘要:
一、饿汉式 优点:仅实例化一次,线程是安全的。获取实例的速度快 缺点:类加载时立即实例化对象,可能实例化的对象不被使用,造成内存的浪费。 二、懒汉式 public class HoonSingleton { //不能保证实例对象的唯一性 private static HoonSingleton ho 阅读全文
摘要:
上一篇文章《Spring AOP 面向切面编程入门》对AOP作了简要的介绍,包含一些专业术语的解释。 本文基于SpringBoot编写了一个简单的Spring AOPDemo。 注意:在完成了引入AOP依赖包后,不需要去做其他配置。AOP的默认配置属性中,spring.aop.auto属性默认是开启 阅读全文