后端程序员高薪之路(并发编程)
文章平均质量分 92
八股文,不是用来背的,这样学才是正确的姿势 !
非科班大厂码农(同名公众号)
这个作者很懒,什么都没留下…
展开
-
Java并发编程实战 10 | 线程安全问题
Java并发实践》的作者 Brian Goetz 对线程安全的定义是:当多个线程访问同一个对象时,如果无需考虑这些线程在运行时的调度策略和交替执行顺序,也不需要进行额外的同步处理,仍然能够得到正确的结果,那么这个对象就是线程安全的。简单来说,线程安全意味着:无论有多少线程同时访问业务中的某个对象或方法,都不需要做额外的处理(就像编写单线程程序一样),程序依然能够正常运行,不会因多线程的并发访问而出现错误。原创 2024-09-09 12:13:54 · 905 阅读 · 0 评论 -
Java并发编程实战 09 | 为什么需要
守护线程(Daemon Thread)是Java中的一种特殊线程,那么相对于普通线程它有什么特别之处呢?在了解守护线程之前,我们先来思考一个问题:JVM在什么情况下会正常退出?答案是:当Java虚拟机(JVM)中只剩下守护线程在运行时,JVM就会自动退出。上面这句话出自JDK官方文档,原话翻译过来是这样:当JVM中没有正在运行的非守护线程(用户线程)时,JVM进程就会自动退出。这句话可能有些难以理解,但通过下面的代码示例,你就能更清楚地了解它的含义。// 创建一个用户线程try {});原创 2024-09-09 12:11:00 · 614 阅读 · 0 评论 -
Java并发编程实战 08 | 彻底理解Shutdown Hook
释放资源(如文件句柄、网络连接)。关闭数据库连接。保存未完成的数据或状态。我们可以通过钩子线程实现这一点,钩子线程是指在程序结束时,JVM 会自动执行的一类线程。这些线程会被预先“挂钩”在程序退出事件上,一旦 JVM 检测到程序即将退出,就会启动这些线程来执行特定的操作。钩子线程是通过 Runtime.getRuntime().addShutdownHook(Thread hook) 方法来注册的。当 JVM 检测到应用程序即将退出时,就会运行所有注册的钩子线程。@Override。原创 2024-09-08 19:31:54 · 1161 阅读 · 0 评论 -
Java并发编程实战 07 | 如何正确停止线程
生活中,我们经常会遇到类似的情况。在主线程中调用 interrupt 方法来中断目标线程时,目标线程可能无法感知到中断标志,也就是说,即使主线程发出了中断请求,目标线程可能继续运行,不会及时停止或做出其他响应。可以看到,使用 stop 方法强制结束线程可能会导致操作不完全:上面的例子中,只有三批物品被移动,而这些物品在停止后没有被移回原处,这种情况可能带来数据不一致的问题。实际上,当我们停止一个线程时,通常希望它至少能完成一些必要的收尾工作,如保存数据、切换状态等,而不是立即停止,以免导致状态混乱。原创 2024-09-08 19:30:24 · 912 阅读 · 0 评论 -
Java并发编程实战 06 | 为什么不建议使用线程优先级?
线程优先级是一个标识,用来提示操作系统或线程调度器哪个线程更重要、更需要优先执行。优先级通常是一个整数值。在 Java 中,线程优先级的设置范围从 1 到 10,其中 1 是最低优先级,10 是最高优先级。Java 默认情况下,线程的优先级是 5。优先级高的线程通常会获得更多的 CPU 时间片,从而优先执行。但这不是绝对的,操作系统的线程调度器可能会因为其他因素(如操作系统的负载、线程的状态等)来决定实际的执行顺序。原创 2024-09-07 08:55:35 · 669 阅读 · 0 评论 -
Java并发编程实战 05 | 什么是线程组?
在 Java 中,ThreadGroup 用于表示一组线程。通过 ThreadGroup,我们可以批量控制和管理多个线程,使得线程管理更加方便。ThreadGroup 和 Thread 的关系就像它们的字面意思一样简单:每个线程 (Thread) 必定属于一个线程组 (ThreadGroup),线程不能脱离线程组而单独存在。原创 2024-09-07 08:54:54 · 488 阅读 · 0 评论 -
Java并发编程实战 04 | 使用Wait&Notify时要注意什么?
在 Java 中,wait()、notify() 和 notifyAll()方法在多线程编程中主要用于线程间的协作和同步。理解这些方法的使用特点对于编写稳定的多线程程序至关重要。原创 2024-09-06 19:03:52 · 1144 阅读 · 0 评论 -
Java并发编程实战 03 | Java线程状态
在本文中,我们将深入探讨 Java 线程的六种状态以及它们之间的转换过程。其实线程状态之间的转换就如同生物生命从诞生、成长到最终死亡的过程一样。也是一个完整的生命周期。首先我们来看看操作系统中线程的生命周期是如何转换的。原创 2024-09-06 19:02:09 · 1264 阅读 · 0 评论 -
Java并发编程实战 02 | 为什么创建线程只有一种方法?
在 Java 中,我们如何创建和使用线程?为什么说线程的创建方式本质上只有一种呢?本文将从并发编程的基础——如何创建线程开始,希望大家能够打好基础。虽然线程的创建看起来很简单,但其中还是有很多细节值得深入探讨。最后,我们将揭开线程实现的面纱,看清它的本质。首先,大家可以思考一个问题:线程的实现方式有几种?大多数人会回答 2 种、3 种,甚至 4 种,但很少有人会说只有 1 种。我们先来看看常见的两种线程实现方式,以及它们背后的本质。原创 2024-09-05 16:43:53 · 1289 阅读 · 0 评论 -
Java并发编程实战 01 | 进程和线程
最早的计算机就像一个新手服务员,只有在接收到每一条指令时才会开始执行。当用户输入指令时,计算机会执行这条指令,然后等待下一条指令。如果用户在思考或者犹豫时,计算机就会乖乖地等待,虽然这很规范,但效率实在是有点低,因为计算机有很多时间是闲着的。原创 2024-09-05 16:43:09 · 1320 阅读 · 0 评论