03 2024 档案
摘要:JUC源码解析: 深入解读 synchronize锁! synchronize 是常用的锁,我们知道它可是用在方法上、代码块上,用法简单,但深入起来可要大费周章,下面跟着我深入一下吧。 synchronize 影响线程状态 在 Thread.Sate.class 源码中, 线程被定义为六种状态,(也
阅读全文
摘要:JUC源码讲解:逐步解析 join() 问题抛出 join() 在源码中其实是使用了 wait() 方法的, 因此, wait() 的特性 join() 都能继承过来, 我们知道wait()有什么特性呢? wait()的特性: 会释放锁 对中断异常敏感 会释放CPU时间片 我也对wait()做了讲解
阅读全文
摘要:JUC源码讲解:wait() 抛出问题 在线程调用 wait() 时,是否会释放锁?线程的状态是什么样的?会对异常敏感吗?此时CPU资源是否会被释放呢?我们在源码中找找答案吧! 分析源码 进入 wait() 函数,可以看到这样一段代码: public final void wait() throws
阅读全文
摘要:JUC 源码讲解:sleep() 抛出问题 sleep() 能使线程进入 TIMED_WAITING 状态,那么,在使用sleep()会不会释放锁?被中断了会不会抛出异常?在线程使用sleep()时,CPU会不会被释放?我们在源码中和实战中看看答案吧! 查看源码 进入 sleep() 源码,可以看到
阅读全文
摘要:JUC源码讲解:逐步解析 Thread.start() 源码 抛出问题 当 new Thread() 时,线程会进入 NEW 状态,如果我们想要使用线程,就需要调用 start() 方法,那么,在使用 star() 时发生了什么?有什么需要注意的?线程是怎么一步步被创建的?跟着我一起分析源码吧! 阅
阅读全文
摘要:# JUC源码讲解:逐步解析 Thread.init() 源码 抛出问题 我们在 new Thread() 时,init() 方法便会自动调用,用来创建这个线程。那么,创建线程时都发生了什么事?子线程与父线程有何关系?线程是怎么创建的?juc怎么选择 ThreadGroup? 让我们从源码中寻找答案
阅读全文
摘要:JUC源码讲解:线程状态转换 抛出问题 一个线程,有七种(也可以说是六种)状态,究竟是哪七种呢?在什么条件下,线程会进入一个状态,又在什么条件下,线程转而进入另一种状态呢?下面我们从源码角度看一下线程的状态转换 观察源码 我们进去 Thread.State.class 中,可以看到,线程状态由一个
阅读全文
摘要:JUC讲解:使用 stack log(jstack、jps) stack log是通过命令行来查看线程状态的手段,这篇文章着重介绍其用法 使用 为了演示,我写了一段Demo,这段 Demo里包含“wait()线程”,“sleep线程”,“被阻塞的线程”三类线程,我们待会要在stack log 中找到
阅读全文
摘要:Java高并发讲解:守护线程——在源代码中分析setDaemon() 提出问题 我们都知道Java线程分为主线程和守护线程,守护线程是需要手动指定的(setDaemon(true)😉,并且主线程一结束守护线程就不存在了,我写一段demo,大家可以看一看 public static void mai
阅读全文
摘要:Java高并发讲解:线程的优先级——为什么优先级较高的线程没有被优先执行? 通常,我们可以使用 “setPriority(int)” 定义线程的优先级,这个范围是1~10, 我们创建线程时,它的默认优先级是5! 在实际开发中,我们是不需要使用这个函数的,但是我们有必要了解它的工作原理 本篇从源码的角
阅读全文