Yano Blog

少即是多,慢即是快。

深入分析 Java、Kotlin、Go 的线程和协程

前言 协程是什么 协程的好处 进程 进程是什么 进程组成 进程特征 线程 线程是什么 线程组成 任务调度 进程与线程的区别 线程的实现模型 一对一模型 ...

深入分析 Java 乐观锁

前言 激烈的锁竞争,会造成线程阻塞挂起,导致系统的上下文切换,增加系统的性能开销。那有没有不阻塞线程,且保证线程安全的机制呢?——乐观锁。 乐观锁是什么? 操作共享资源时,总是很乐观,认为自己可以成功。在操作失败时(资源被其他线程占用),并不会挂起阻塞,而仅仅是返回,并且失败的线程可以重试。 优点: 不会死锁 不会饥饿 不会因竞争造成系统开销 乐观锁的实现 C...

深入分析 Java Lock 同步锁

前言 Java 的锁实现,有 Synchronized 和 Lock。上一篇文章深入分析了 Synchronized 的实现原理:由Java 15废弃偏向锁,谈谈Java Synchronized 的锁机制。 本篇文章深入分析 Lock 的实现,以及对比其与 Synchronized 的不同。 Synchronized 与 Lock 的对比 实现方式:Synchronize...

由 Java 15 废弃偏向锁,谈谈 Java Synchronized 的锁机制

Java 15 废弃偏向锁 当时为什么要引入偏向锁? 现在为什么又要废弃偏向锁? 思考 锁的发展过程 Synchronized 修饰方法 修饰代码块 JVM 同步指令分析 monitorenter monitorexit ...

Java Stream 源码分析

前言 操作分类 源码结构 BaseStream Stream ReferencePipeline Sink 操作叠加 加载数据源 中间操作 终结操作 并行处理 并行错误的使用方法 并行正确的使用方法 ...

30 分钟玩转「正则表达式」

简介 定义 分类 Linux 常用文本工具 grep, egrep sed awk(gawk) 匹配单个字符 匹配纯文本 匹配任意字符 匹配一组字符 ...

Java String 演进全解析

前言 String 是我们使用最频繁的对象,使用不当会对内存、程序的性能造成影响,本篇文章全面介绍一下 Java 的 String 是如何演进的,以及使用 String 的注意事项。 下面的输出结果是什么? @Test public void testString() { String str1 = "abc"; String str2 = new String("ab...

乐高马里奥

V酱给俺买了个生日礼物,俺从上周二到上周日,下班就在家拼乐高,终于拼好了。拼的过程中,竟然上瘾了,突然想到我已经好久没有对一件事情这么有热情了……想到了大学时天天研究电路的情景~突然很怀念。 作为留念,拍了个小视频放到了B站:https://www.bilibili.com/video/BV1hr4y1c7i1 公众号 coding 笔记、点滴记录,以后的文...

Maven 依赖树的解析规则

一、依赖树结构 二、依赖问题 2.1 依赖冲突 2.2 依赖循环 2.3 依赖排除 三、依赖分析 3.1 Maven 命令行 3.2 IDEA 插件 四、参考链接 对于 Java 开发工程师来说,Maven 是依赖管理和代码构建的标准。遵循 「约定大于配置」 ...

生活、工作总结

转眼一年就要过去了,最近在工作和生活中都有一些感悟,记录一下。 关于读书 其实这一年我读的书并不多,技术书籍还好,文学类的几乎就没有读过。上学的时候读了很多文学类书籍,可是最近突然失去了兴趣,几次下定决心要读完村上春树的《刺杀骑士团长》,结果几章就光速放弃;买了1年的《白鹿原》,甚至连封面都没有翻开……但是我现在对历史、经济产生了一些兴趣。 对于读书的态度和方法,最近也发生了一些改变: ...