➤多线程
文章平均质量分 93
本专栏旨在帮助读者深入理解多线程的原理和应用。通过本专栏的学习,读者将了解多线程编程的基本概念、线程创建与销毁、线程同步与互斥、线程通信等重要内容。此外,本专栏还会介绍多线程在实际开发中的应用,例如Java并发包、线程池等。
技术蜗牛-阿春
————我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容————
展开
-
深入理解JMM内存模型
目录一、JMM内存模型产生的背景?二、什么是JMM内存模型?三、JMM内存模型用来解决什么问题?四、JMM内存模型与JVM内存模型有什么关系?1、JMM是Java物理内存模型2、JVM是运行时内存模型3、JMM内存模型和JVM运行时内存模型的关系一、JMM内存模型产生的背景?JMM(Java内存模型)源于物理机器CPU架构的内存模型,最初用于解决MP(多处理器架构)系统中的缓存一致性问题,而JVM为了屏蔽各个硬件平台和操作系统对内存访问机制的差异化,提出了JMM的概.原创 2021-10-17 16:27:26 · 2364 阅读 · 2 评论 -
【多线程系列】synchronized详解(4)
一、Java对象头synchronized使用的锁是存放在Java对象头里面,具体位置是对象头里面的MarkWord,MarkWord里默认数据是存储对象的HashCode等信息,但是会随着对象的运行改变而发生变化,不同的锁状态对应着不同的记录存储方式二、Monitor RecordMonitor Record是线程私有的数据结构,每一个线程都有一个可用monitor record列表,同时还有一个全局的可用列表。每一个被锁住的对象都会和一个monitor record关联(对象头的MarkWo原创 2021-07-04 08:15:54 · 449 阅读 · 0 评论 -
【多线程系列】synchronized详解(3)
一、什么是Monitor?借用大佬对Monitor理解的实例:https://www.hollischuang.com/archives/2030先来举个例子,然后我们在上源码。我们可以把监视器理解为包含一个特殊的房间的建筑物,这个特殊房间同一时刻只能有一个客人(线程)。这个房间中包含了一些数据和代码。如果一个顾客想要进入这个特殊的房间,他首先需要在走廊(Entry Set)排队等待。调度器将基于某个标准(比如 FIFO)来选择排队的客户进入房间。如果,因为某些原因,该客户客户暂时因为其原创 2021-06-29 19:25:47 · 212 阅读 · 1 评论 -
【多线程系列】synchronized详解(2)
一、方法上的synchronized1、实例方法:class Test{ public synchronized void test() { }}//等价于class Test{ public void test() { synchronized(this) { } }}2、静态方法:class Test{ public synchronized static void原创 2021-06-25 22:56:39 · 288 阅读 · 2 评论 -
【多线程系列】Synchronized详解(1)
一、共享问题两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?@Slf4j(topic = "c.Test01")public class Test01 { static int counter = 0; static Object lock = new Object(); public static void main(String[] args) throws InterruptedException { Thread t1原创 2021-06-25 20:45:05 · 414 阅读 · 2 评论 -
【多线程系列】线程的状态与常用方法详解
一、线程的状态1、线程状态,线程可以处于以下状态之一:NEW 尚未启动的线程处于此状态。RUNNABLE 在 Java 虚拟机中执行的线程处于这种状态。BLOCKED 被阻塞等待监视器锁的线程处于这种状态。WAITING 无限期等待另一个线程执行特定操作的线程处于此状态。TIMED_WAITING 等待另一个线程执行操作达指定等待时间的线程处于此状态。TERMINATED 已退出的线程处于此状态。一个线程在给定的时间点只能处于一种状态。 这些状态是不反映任何操作系统线程状态原创 2021-06-25 14:54:31 · 939 阅读 · 1 评论 -
【多线程系列】线程的创建与启动详解
一、创建线程下面两种方式相信一定非常的熟悉,这是我们常用的方式,下面就以它开头,对线程的创建和启动做一个详细的分析。也是希望通过分析这个过程来理解多线程。1、继承Thread的方式创建线程public class ThreadTest extends Thread { public void run(){ System.out.println("重写run方法"); } public static void main(String[] args) {原创 2021-06-24 21:15:04 · 877 阅读 · 1 评论