随笔分类 -  Java[多线程]

摘要:马士兵多线程直播笔记(下) CPU与缓存 缓存L1、L2、L3失效后回去内存中找,然后依次返回L3、L2、L1. 缓存一致性协议(MESI) 同一个缓存行在多个CPU内存中,一个修改后,其他CPU也需要感知! 缓存行的四种状态(64个字节) Modified Exclusive Shared Inv 阅读全文
posted @ 2020-06-26 22:13 子烁爱学习 阅读(498) 评论(1) 推荐(0) 编辑
摘要:线程与进程 进程:操作系统分配资源的基本单位。 线程:CPU调度(执行)的基本单位。共享进程的资源。 一个CPU同一时间只能执行一个线程,表象是线程切换(Context Switch)。对CPU来说,寄存器存数、ALU计算、PC(程序计数器)记录位置。 线程切换过程 线程时间结束后,当前整个状态(P 阅读全文
posted @ 2020-06-25 22:11 子烁爱学习 阅读(816) 评论(0) 推荐(0) 编辑
摘要:Java多线程基础:Synchronized关键字 对象的内存布局 下面的讨论都是针对HotSpot虚拟机。 首先我们来了解一下对象的内存布局,对象在内存中存储的布局整体可以分为3块区域: 如上图可见呢,Mark Word 专门有2 bit 用于存储锁标志位,由于Mark Word空间复用,存储的内 阅读全文
posted @ 2020-06-01 11:17 子烁爱学习 阅读(316) 评论(0) 推荐(0) 编辑
摘要:Java多线程基础:Java与线程 线程的实现 使用内核线程实现 内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核支持的线程。内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。 程序不会直接使用内核线程,而是使用内核线程的一种高级接口——轻量级线 阅读全文
posted @ 2020-05-29 14:53 子烁爱学习 阅读(259) 评论(0) 推荐(0) 编辑
摘要:Java多线程基础:Volatile关键字 Volatile关键字 Volatile关键字主要是使变量在多个线程间可见。 线程的私有堆栈 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理 。 这个时机对普通变量是没有规定的,而针对 阅读全文
posted @ 2020-05-25 15:16 子烁爱学习 阅读(331) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础——线程的状态 线程的状态 在Java中,线程有6种状态,分别为: 初始:NEW 运行:RUNNABLE 阻塞:BLOCKED 等待:WAITING 超时等待:TIMED_WAIT 终止:TERMINAL 这六种状态分别对应于Thread.State中的枚举类型。可以用下 阅读全文
posted @ 2020-03-02 23:27 子烁爱学习 阅读(302) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础——线程池 线程池 《阿里巴巴Java开发手册》有如下一则: 说明里介绍的很清楚,总结来说是这样的: 线程的创建和销毁是耗时较长、耗系统资源较多的操作。 将线程放到线程池中,方便管理,且提高线程的复用性,即一个线程可以分配给多个任务使用。 线程池原理 线程池状态及数量 线 阅读全文
posted @ 2019-09-10 17:50 子烁爱学习 阅读(300) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程杂谈——双重检查锁与Volatile 双重检查锁 有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例 阅读全文
posted @ 2019-08-14 10:00 子烁爱学习 阅读(440) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础(6)——信号量(Semaphore) 信号量 信号量(Semaphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S≥0时,S表示可用资源的数量。 信号量可以被两个操作修改: 执行一次P操作意味着请求分配一个资源,因此 阅读全文
posted @ 2019-07-30 16:34 子烁爱学习 阅读(1214) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础(5)——倒计时器(CountDownLatch) 引入倒计时器 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线 阅读全文
posted @ 2019-07-29 09:43 子烁爱学习 阅读(1229) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础——锁机制 显示锁 ReentrantLock ReentrantLock是一种标准的互斥锁,每次只允许一个线程持有ReentrantLock。 使用ReentrantLock来保护对象状态: 如果没有finally来释放Lock,相当于启动了一个定时炸弹。 Reentr 阅读全文
posted @ 2018-08-08 10:06 子烁爱学习 阅读(364) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础——线程间的通信 使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督。 线程间的通信 思维导图 等待/通知机制 不使用等待/通知机制 我们可以使用使用sleep()与 whle(true) 阅读全文
posted @ 2018-08-02 23:17 子烁爱学习 阅读(244) 评论(0) 推荐(0) 编辑
摘要:Java多线程基础:生产者/消费者模型 生产者/消费者模型 生产者消费者模型是多线程协作的经典模型,生产者线程负责产出数据,消费者线程负责消费生产者生产的数据,数据存放在共享区域内。该模型旨在合理的指导生产者和消费者进行生产或消费,避免过量生产以及无法消费的等问题。 首先生产者和消费者互相解耦,那线 阅读全文
posted @ 2018-08-02 20:56 子烁爱学习 阅读(377) 评论(0) 推荐(0) 编辑
摘要:Java基础教程:多线程基础——内存模型 Java内存模型 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中提出变量这样的底层细节。 主内存与工作内存 Java内存模型规定所有变量都存贮到主内存(如虚拟机物理内存中的一部分)中。每一个线程都有一个自己的 阅读全文
posted @ 2018-01-25 14:20 子烁爱学习 阅读(353) 评论(0) 推荐(0) 编辑