摘要: JUC 源码解析:lock锁与synchronized锁的区别 本文使用 jdk1.8 Lock 锁的使用注意事项 要在 finally 块中释放锁。保障锁一定能被释放 不要把加锁代码写进 try 块里。因为我们可能会自己实现Lock接口,在一些实现中,如果获取锁时发生了异常,可能导致锁被无故释放 阅读全文
posted @ 2024-05-14 17:11 yangruomao 阅读(8) 评论(0) 推荐(0) 编辑
摘要: JUC源码解析:深入理解 volatile volatile 的定义 volatile 的作用: 保证可见性 禁止指令重排序 volatile 可以被看作是轻量版的 synchronized,volatile 保证了多线程中共享变量的“可见性”,就是说,当volatile 变量的值被修改时,其他线程 阅读全文
posted @ 2024-05-11 22:34 yangruomao 阅读(2) 评论(0) 推荐(0) 编辑
摘要: JUC源码解析:深入解读偏向锁 本文使用 jdk8 几种锁状态介绍 先介绍一下锁状态吧 看偏向锁这一栏, 它的内存存储了 线程ID 和 Epoch , 这一点尤为关键, 意味着偏向锁没有内存可以存储对象头的 hashCode, 而其他锁是有地方存的.。也就意味着,,当锁对象被隐式(父类)或显试调用了 阅读全文
posted @ 2024-05-07 13:55 yangruomao 阅读(10) 评论(0) 推荐(1) 编辑
摘要: 拉取并打开容器: 把数据挂载到磁盘上,这样好些,换个容器数据也一直都在 docker run \ --name mysql \ -d \ -p 3306:3306 \ --restart unless-stopped \ -v /mydata/mysql/log:/var/log/mysql \ - 阅读全文
posted @ 2024-05-05 00:03 yangruomao 阅读(6) 评论(0) 推荐(0) 编辑
摘要: JUC源码解析: 深入解读 synchronize锁! synchronize 是常用的锁,我们知道它可是用在方法上、代码块上,用法简单,但深入起来可要大费周章,下面跟着我深入一下吧。 synchronize 影响线程状态 在 Thread.Sate.class 源码中, 线程被定义为六种状态,(也 阅读全文
posted @ 2024-03-22 17:17 yangruomao 阅读(21) 评论(0) 推荐(0) 编辑
摘要: JUC源码讲解:逐步解析 join() 问题抛出 join() 在源码中其实是使用了 wait() 方法的, 因此, wait() 的特性 join() 都能继承过来, 我们知道wait()有什么特性呢? wait()的特性: 会释放锁 对中断异常敏感 会释放CPU时间片 我也对wait()做了讲解 阅读全文
posted @ 2024-03-13 20:29 yangruomao 阅读(8) 评论(0) 推荐(0) 编辑
摘要: JUC源码讲解:wait() 抛出问题 在线程调用 wait() 时,是否会释放锁?线程的状态是什么样的?会对异常敏感吗?此时CPU资源是否会被释放呢?我们在源码中找找答案吧! 分析源码 进入 wait() 函数,可以看到这样一段代码: public final void wait() throws 阅读全文
posted @ 2024-03-13 19:38 yangruomao 阅读(3) 评论(0) 推荐(0) 编辑
摘要: JUC 源码讲解:sleep() 抛出问题 sleep() 能使线程进入 TIMED_WAITING 状态,那么,在使用sleep()会不会释放锁?被中断了会不会抛出异常?在线程使用sleep()时,CPU会不会被释放?我们在源码中和实战中看看答案吧! 查看源码 进入 sleep() 源码,可以看到 阅读全文
posted @ 2024-03-13 19:20 yangruomao 阅读(6) 评论(0) 推荐(0) 编辑
摘要: JUC源码讲解:逐步解析 Thread.start() 源码 抛出问题 当 new Thread() 时,线程会进入 NEW 状态,如果我们想要使用线程,就需要调用 start() 方法,那么,在使用 star() 时发生了什么?有什么需要注意的?线程是怎么一步步被创建的?跟着我一起分析源码吧! 阅 阅读全文
posted @ 2024-03-12 21:43 yangruomao 阅读(8) 评论(1) 推荐(0) 编辑
摘要: # JUC源码讲解:逐步解析 Thread.init() 源码 抛出问题 我们在 new Thread() 时,init() 方法便会自动调用,用来创建这个线程。那么,创建线程时都发生了什么事?子线程与父线程有何关系?线程是怎么创建的?juc怎么选择 ThreadGroup? 让我们从源码中寻找答案 阅读全文
posted @ 2024-03-12 21:20 yangruomao 阅读(3) 评论(0) 推荐(0) 编辑
摘要: JUC源码讲解:线程状态转换 抛出问题 一个线程,有七种(也可以说是六种)状态,究竟是哪七种呢?在什么条件下,线程会进入一个状态,又在什么条件下,线程转而进入另一种状态呢?下面我们从源码角度看一下线程的状态转换 观察源码 我们进去 Thread.State.class 中,可以看到,线程状态由一个 阅读全文
posted @ 2024-03-12 20:23 yangruomao 阅读(3) 评论(0) 推荐(0) 编辑
摘要: JUC讲解:使用 stack log(jstack、jps) stack log是通过命令行来查看线程状态的手段,这篇文章着重介绍其用法 使用 为了演示,我写了一段Demo,这段 Demo里包含“wait()线程”,“sleep线程”,“被阻塞的线程”三类线程,我们待会要在stack log 中找到 阅读全文
posted @ 2024-03-11 20:02 yangruomao 阅读(12) 评论(0) 推荐(0) 编辑
摘要: Java高并发讲解:守护线程——在源代码中分析setDaemon() 提出问题 我们都知道Java线程分为主线程和守护线程,守护线程是需要手动指定的(setDaemon(true)😉,并且主线程一结束守护线程就不存在了,我写一段demo,大家可以看一看 public static void mai 阅读全文
posted @ 2024-03-11 19:00 yangruomao 阅读(4) 评论(0) 推荐(0) 编辑
摘要: Java高并发讲解:线程的优先级——为什么优先级较高的线程没有被优先执行? 通常,我们可以使用 “setPriority(int)” 定义线程的优先级,这个范围是1~10, 我们创建线程时,它的默认优先级是5! 在实际开发中,我们是不需要使用这个函数的,但是我们有必要了解它的工作原理 本篇从源码的角 阅读全文
posted @ 2024-03-11 18:31 yangruomao 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 本文使用的 ES、Kibana、ik 均为 7.4.2 版本。 1. 部署 ES 创建实例 先创建挂载目录。echo配置:可以被任意主机访问 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo 阅读全文
posted @ 2023-11-01 23:09 yangruomao 阅读(5) 评论(0) 推荐(0) 编辑