跳至主要內容
详细了解 Synchronized 锁升级过程

详细了解 Synchronized 锁升级过程

前言

首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把

可以用来干嘛?锁,当然当然是用于线程间的同步,以及保护临界区内的资源。我们知道,锁是个非常笼统的概念,像生活中有指纹锁、密码锁等等多个种类,那 synchronized 代表的锁具体是把什么锁呢?

答案是—— Java 内置锁。在 Java 中,每个对象中都隐藏着一把锁,而 synchronized 关键字就是激活这把隐式锁的把手(开关)。


LeonSH...大约 8 分钟JavaSynchronized
Java NIO Selector 的使用

Java NIO Selector 的使用

之前的文章已经把 Java 中 NIO 的 Buffer、Channel 讲解完了,不太了解的可以先回过头去看看。这篇文章我们就来聊聊 Selector —— 选择器。

首先 Selector 是用来干嘛的呢?不熟悉这个概念的话我们其实可以这么理解:

selector
selector

LeonSH...大约 8 分钟JavaSelectorNIO
Java NIO Channel 使用

Java NIO Channel 使用

Java NIO 中的 Channel 分类:

  • FileChannel
  • SocketChannel
  • ServerSocketChannel
  • DatagramChannel
channel 分类
channel 分类

LeonSH...大约 6 分钟JavaChannelNIO
玩转 ByteBuffer

玩转 ByteBuffer

为什么要讲 Buffer

首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢?

例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中,而是首先会将磁盘中的数据复制到内核缓冲区中,然后再将数据从内核缓冲区复制到用户缓冲区内,在图里看起来就是这样:

从磁盘读取文件
从磁盘读取文件

LeonSH...大约 10 分钟JavaNIOByteBuffer
ArrayList 从源码角度剖析底层原理

ArrayList 从源码角度剖析底层原理

对于 ArrayList 来说,我们平常用的最多的方法应该就是 addremove 了,本文就主要通过这两个基础的方法入手,通过源码来看看 ArrayList 的底层原理。

add

默认添加元素

这个应该是平常用的最多的方法了,其用法如下。


LeonSH...大约 9 分钟JavaArrayList
浅谈JVM与垃圾回收

浅谈JVM与垃圾回收

写在前面

简单的介绍一下JVM(Java Virtual Machine)吧,它也叫Java虚拟机。虽然它叫虚拟机,但是实际上不是我们所理解的虚拟机,它更像操作系统中的一个进程。JVM屏蔽了各个操作系统底层的相关的东西,Java程序只需要生成对应的字节码文件,然后由JVM来负责解释运行。

介绍几个容易混淆的概念,JDK(Java Development Kit) 可以算是整个Java的核心,其中有编译、调试的工具包和基础类库,它也包含了JRE


LeonSH...大约 18 分钟JavaJVMGC
深入了解ConcurrentHashMap

深入了解ConcurrentHashMap

在上一篇文章【简单了解系列】从基础的使用来深挖HashMap里,我从最基础的使用中介绍了HashMap,大致是JDK1.7和1.8中底层实现的变化,和介绍了为什么在多线程下可能会造成死循环,扩容机智是什么样的。感兴趣的可以先看看。

我们知道,HashMap是非线程安全的容器,那么为什么ConcurrentHashMap能够做到线程安全呢?


LeonSH...大约 13 分钟JavaConcurrentHashMap
【简单了解系列】从基础的使用来深挖HashMap

【简单了解系列】从基础的使用来深挖HashMap

HashMap定义

说的专业一点,HashMap是常用的用于存储key-value键值对数据的一个集合,底层是基于对Map的接口实现。每一个键值对又叫Entry,这些Entry分散的存储在一个由数组和链表组成的集合中。当然在Java8中,Entry变成了Node

说的通俗一点,就像你去住酒店,你下单提供了你的手机号,然后到酒店了给你一个房卡,你知道了你的房号之后再根据这个房号去找对应的房间一样。

房号就是key,房间里就是value。你通过手机号下单到酒店给你房号可以理解为对key哈希的过程。你找的过程就是HashMap根据key取到对应value的过程


LeonSH...大约 13 分钟JavaHashMap
初探Java类型擦除

初探Java类型擦除

什么是类型擦除

为了让你们快速的对类型擦除有一个印象,首先举一个很简单也很经典的例子。

// 指定泛型为String
List<String> list1 = new ArrayList<>();
// 指定泛型为Integer
List<Integer> list2 = new ArrayList<>();
System.out.println(list1.getClass() == list2.getClass()); // true

LeonSH...大约 9 分钟Java泛型
如何在SpringBoot中集成JWT(JSON Web Token)鉴权

如何在SpringBoot中集成JWT(JSON Web Token)鉴权

这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token)。

关于JWT

什么是JWT

老生常谈的开头,我们要用这样一种工具,首先得知道以下几个问题。

  • 这个工具是什么,这个工具解决了什么问题
  • 是否适用于当前我们所处得业务场景
  • 用了之后是否会带来任何其他问题
  • 怎么用才是最佳实践

LeonSH...大约 7 分钟JavaSpring BootJWT
2