深入浅出多线程并发编程
文章平均质量分 86
深入浅出java多线程编程,通过通俗易懂的讲解方式,让大家了解多线程本质和原理,能够快速上手应用到项目当中
Xd聊架构
CSDN博客专家,Java领域优质创作者,任大厂架构师,专注Java、云原生、大数据领域
展开
-
深入浅出多线程编程实战(九)读写锁ReentrantReadWriteLock
文章目录前言一、ReadWriteLock二、ReentrantReadWriteLock1.特性2.使用样例结尾前言在前面的文章中我们介绍过两种锁:内置锁(synchronized)和显式锁(ReentrantLock)。这两种锁都是独占锁,也就是说获取到这个锁之后其它线程再想获取这个锁必须等当前线程释放这个锁。有些时候线程多数情况下都是读取数据的值,而不是修改这个数据,但是读取数据的线程之间是可以并发读取的,如果使用独占锁会限制系统的性能,由此读写锁应运而生。一、ReadWriteLockR原创 2021-08-09 17:22:17 · 10936 阅读 · 18 评论 -
深入浅出多线程编程实战(八)优雅关闭线程池
深入浅出多线程编程实战(八)优雅关闭线程池文章目录前言一、关闭线程池的方法1.ShutDown2.ShutDownNow3.awaitTermination4.isShutDown5.isTerminated结尾前言我们经常在项目中使用的线程池,但是是否关心过线程池的关闭呢,可能很多时候直接再项目中直接创建线程池让它一直运行当任务执行结束不在需要了也不去关闭,这其实是存在非常大的风险的,大量的线程常驻在后台对系统资源的占用是巨大的 ,甚至引发异常。所以在我们平时使用线程池时需要注意优雅的关闭,这原创 2021-05-25 14:57:18 · 10794 阅读 · 37 评论 -
深入浅出多线程编程实战(七)六种常见线程池讲解
深入浅出多线程编程实战(七)六种常见线程池讲解文章目录一、线程池介绍二、java常用线程池关系1.六种常用线程池2.类图及主要方法三.线程池实现类讲解1.FixedThreadPool2.SingleThreadExecutor3.CachedThreadPool4.ScheduledThreadPool5.SingleThreadScheduledExecutor6.ForkJoinPool一、线程池介绍目的:为了避免系统频繁地创建和销毁,我们可以让创建的线程复用。意义:在线程池中,总有那么几原创 2021-05-24 13:51:31 · 10801 阅读 · 24 评论 -
深入浅出多线程编程实战(六)ThreadLocal详解(内存泄漏)
深入浅出多线程编程实战(六)ThreadLocal详解(内存泄漏)文章目录前言一、内存泄露二、GC回收机制1.强引用与弱引用2.如何找到需要回收的对象三、ThreadLocal 内存泄漏四、ThreadLocal 正确使用前言在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露,更重要的是知道该如何避免这样情况发生,增强系统的健壮性。一、内存泄露内存泄露为程序在申请内存后,无法释放原创 2021-05-13 17:59:18 · 22219 阅读 · 150 评论 -
深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景)
深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景)文章目录一、ThreadLocal简介二、ThreadLocal与Synchronized区别三、ThreadLocal简单使用四、ThreadLocal原理五、ThreadLocal 应用场景一、ThreadLocal简介ThreadLocal(是Thread Local Variable,线程局部变量)类是Java为线程安全提供的一个工具类,代表一个线程局部变量。把数据放在ThreadLocal中可以让每个线程原创 2021-05-12 17:19:36 · 22432 阅读 · 23 评论 -
深入浅出多线程编程实战(四)CAS与ABA问题
深入浅出多线程编程实战(三)CAS与ABA问题文章目录深入浅出多线程编程实战(三)CAS与ABA问题一、CAS二、ABA问题一、CASCAS全称:Compare-And-Swap(比较 and 替换),它是一条CPU并发原语在日常开发中基本不会直接使用CAS操作,因为这个操作比较复杂,我们一般通过一些JDK封装好的并发工具类,这些类在java.util.concurrent包下,这个包下的工具类很多都用到了CAS操作。以上就是CAS执行流程,当该线程开始后会先读取要修改的值E的当前值,然后再原创 2021-04-28 11:38:27 · 23312 阅读 · 32 评论 -
深入浅出多线程编程实战(三)线程关键字(synchronized、volatile、偏向锁、自旋锁)
深入浅出多线程技术实现(二)文章目录深入浅出多线程技术实现(二)一、volatile1.保证线程可见性2.禁止指令重排序二、使用步骤1.引入库2.读入数据总结一、volatile1.保证线程可见性demo样例:package test;import java.util.concurrent.TimeUnit;public class Test { boolean running = true; void m() { System.out.println("m原创 2021-04-27 17:20:15 · 23280 阅读 · 28 评论 -
深入浅出多线程编程实战(二)线程三大特性(原子性、可见性、有序性)
深入浅出多线程编程实战(四)线程三大特性文章目录一、原子性二、可见性三、有序性一、原子性原子性:熟悉数据库特性的我们都知道数据库sql执行中也有原子性,数据库中的原子性是这样定义的在一个事务中要么所有的sql都执行,要么都不执行。java内存模型中的原子性也是类似,要么所有的指令都执行,要么都不执行。这样才能保证并发操作的安全性和一致性。但是并发在带给我们方便的同时,却不能很好的解决原子性的问题。下面我们看一下Java并发操作中是怎么产生原子性问题的。操作系统为了提高并行处理问题的能力,会将原创 2021-05-10 16:09:59 · 23532 阅读 · 27 评论 -
深入浅出多线程编程实战(一)线程状态、常用方法
多线程讲解文章目录多线程讲解一、线程状态迁移图二、Thread常用方法1.sleep2.yield3.join三、synchronized锁1.synchronized特性2.synchronized的三种应用方式3.synchronized锁的底层实现一、线程状态迁移图线程六种状态:1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,原创 2021-04-26 17:28:39 · 23506 阅读 · 38 评论