![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 93
晓龙oba
码农界的小学生,职场之中的卷心菜
展开
-
[多线程] - 线程池详解
文章目录一、线程池的简介1. 什么是线程池2. 为什么要使用线程池3. 线程池的实现原理4. 创建线程池的方式4.1 通过构造方法创建4.2 工厂方法一、线程池的简介1. 什么是线程池首先我们可以参考下百度百科给出的答案:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。然后我们可以通过百度百科的答案进一步的定义:在进程开始时创建一定数量的线程,并加到池中以等待工作。当服务器收到请求时,它会唤醒池内的一个线程(如果有可用线程),并将需要服务的请求传递给它。原创 2021-01-04 11:41:45 · 290 阅读 · 2 评论 -
[多线程] - AQS简介
文章目录一、AQS简介1. 什么是AQS2. AQS类的实现一、AQS简介1. 什么是AQSAQS是 AbstractQueuedSynchronizer的简写,中文译作抽象同步队列,它是实现同步器的基础组件,JUC(Java.util.cuncurrent包)中的大多数锁都是通过AQS设计实现的,在大多数情况下我们可能会很少能够接触到AQS,但是了解下AQS的原理还是有助于我们理解Java中的锁机制。2. AQS类的实现为了方便理解,我们先将AQS的类图粘上(下文中AbstractQueuedS原创 2020-12-29 14:06:03 · 209 阅读 · 2 评论 -
[多线程] - Java中的锁的分类
文章目录前言一、乐观锁和悲观锁二、共享锁与排它锁三、公平锁和非公平锁四、可重入锁和不可重入锁五、轻量级锁,偏向锁,自旋锁,重量级锁前言相信很多同学在学习多线程的时候,被各种各样的锁弄得七荤八素,今天我就准备针对这些锁做一个梳理,喜欢的同学请记得一键三连!一、乐观锁和悲观锁首先我们先来说下乐观锁和悲观锁,乐观锁与悲观锁最初是数据库设计者提出的改变,后在JAVA的并发包中也提供了实现。乐观锁和悲观锁主要是设计者针对线程之间不同的竞争程度提出的两种优化策略。当前线程间对于共享变量如果不存在竞争或者竞争并不原创 2020-12-23 10:33:26 · 146 阅读 · 1 评论 -
[多线程] - 锁的升级与对比(java中的偏向锁、轻量级锁、重量级锁)
文章目录前言一、偏向锁1. 什么是偏向锁2. 偏向锁的实现原理2.1 对象头2.2 偏向锁的获取2.3 偏向锁的关闭二、轻量级锁1. 什么是轻量级锁2. 轻量级锁的获取3. 轻量级锁的解锁三、重量级锁1. 什么是重量级锁2. 重量级锁的获取四、锁的升级与特点1. 锁的升级2. 锁的特点1. 锁的标志位2. 锁的特点前言最近整理了很多关于多线程的理论概念与底层实现,这里我尽量的使用图文结合的方式方便大家理解,如果有不清楚的地方也欢迎大家留言,我基本每天都在,可以在看到的第一时间回复。一、偏向锁1. 什原创 2020-12-22 15:18:15 · 446 阅读 · 4 评论 -
[多线程] - CAS算法(乐观锁与悲观锁)
文章目录一、乐观锁与悲观锁二、CAS算法一、乐观锁与悲观锁在日常的开发中为了保证共享变量的线程安全,大多数程序员的潜意识行为就是为这个共享变量的作用域加锁,就比如常见的使用synchronized关键字来同步代码块。但是简单粗暴的加锁真的是最优解吗?假如被锁住的共享变量并不会被频繁修改,但是synchronized实现的同步无疑会引起线程的堵塞从而降低程序的运行效率。这个时候我们有什么思路可以优化吗?当然可以,JDK的设计者基于这种情况早已给出了很多种解答方式。在JDK1.5后java通过排它锁,乐观锁原创 2020-12-21 14:06:12 · 745 阅读 · 1 评论 -
[多线程] - java内存模型(JMM内存模型)
文章目录前言一、Java内存模型的基础二、 顺序一致性模型1. 什么是顺序一致性模型2.as-if-serial3.happens-before三、后记前言《Java并发编程的艺术》的前三章内容有点乱,我在尽自己最大的能力捋一下前三章的核心知识点分享出来,这里还是和之前的想法一样,如果是没有基础的小白,千万不要买这本书,推荐可以去看下《Java并发编程之美》。一、Java内存模型的基础之前我提出过一个这么的概念来简化大家对线程的理解:无论我们在编码层做多么复杂的业务处理,对于计算机而言就只有三个原创 2020-12-17 17:02:26 · 479 阅读 · 3 评论 -
[多线程] - 并发编程的性能瓶颈(CPU上下文切换与资源限制)
文章目录前言一、并发编程的瓶颈二、CPU的上下文简介1. 什么是CPU的上下文2. 上下文切换3. 如何减少上下文切换三、资源限制1. 什么是资源限制2.如果避免资源限制四、死锁前言《Java多线程编程核心技术》中相关的内容已经更新的差不多了,接下来我会将《Java并发编程的艺术》中有价值的知识点做一个梳理更新,顺便分享下电子书的链接,该系列文章配合电子书一起学习效果更佳。Java并发编程的艺术链接:https://pan.baidu.com/s/18H60E_8KDO9uNIuWdghzcg提原创 2020-12-16 15:07:16 · 1211 阅读 · 1 评论 -
[多线程] - Lock对象的使用详解
文章目录一、Lock对象简介二、Lock对象的应用1.Lock对象的同步性验证1)Lock接口的实现类2)Lock对象实现同步3)多代码块之间的同步性4)unlock的使用2. Condition与多路通知1)condition实现wait/notify通知模型2)选择性通知3)Condition对象的总结4) Condition对象的面试题三、Lock对象的锁特性1.公平锁与非公平锁2.读写锁(共享锁与排它锁)一、Lock对象简介按照惯例,我们在介绍一个对象前首先要翻译一下他的语义:什么,锁?是不原创 2020-12-11 17:58:57 · 1192 阅读 · 2 评论 -
[多线程] - ThreadLocal的使用
文章目录一、TreadLocal是什么二、ThreadLocal的简单应用三、ThreadLocal的源码分析4、InheritableThreadLocal一、TreadLocal是什么在讲述概念前,我们还是先看下官方文档是怎么定义的:观看官方文档,我们可以将Threadlocal做如下简单的定义:ThreadLocal是指的用来保存线程局部变量的一个类,既然用来保存数据,代表我们可以将ThreadLocal看做是一个容器。ThreadLocal是用来解决多个线程使用同一个共享变量的问题,原创 2020-12-08 16:10:24 · 522 阅读 · 1 评论 -
[多线程] - join方法的使用详解
文章目录一、前言二、join方法1. join的Api简介2. join方法的实现3.总结一、前言按照惯例,我们在讲一个知识点之前习惯性的提出一个业务场景的应用来帮助理解,今天咱们就通过一个渣男的案例来讲讲join的相关特性:土木三班陈同学是一个很有名气的渣男,最近陈同学刚刚跟女朋友分了手,处于空窗期的他打开了微信附近的人,挑了个他觉得长得还不错的姑娘发起了搭讪请求。public class ChatUp { // 被搭讪人是否回复 public volatile static boolea原创 2020-12-07 16:12:54 · 1709 阅读 · 1 评论 -
《Java多线程编程核心技术 第二版》 知识点总结
第一章、Java多线程技能1.线程的入门概念 2.从Thread类的构造函数分析创建一个线程需要的基本元素3.如何优雅的停止一个线程第二章、对象及变量的并发访问4.synchronized关键字入门(同步方法与同步代码块)5.volatile关键字第三章、线程间通信6.wait及notify的简介(线程间的通信)...原创 2020-12-06 16:26:01 · 168 阅读 · 1 评论 -
[多线程] - 线程间的通信(wait及notify方法的应用)
文章目录一、前言1. 什么是线程间的通信2. 提供一个简单的业务场景二、 wait及notify的使用1. wait方法的API简介2. notify方法的API简介3. 新的业务需求4. 线程的假死5. notifyAll三、补充1. wait和notify方法的锁状态2. wait和sleep的区别一、前言1. 什么是线程间的通信我想看到标题很多人想到的第一反应大概是疑问什么是线程间的通信?其实这个概念很好理解,在我们的实际的业务开发中,很多场景都是多个线程之间配合进行工作的,就好比一条工厂的流水原创 2020-12-04 18:09:56 · 484 阅读 · 1 评论 -
[多线程] - volatile关键字的特性
文章目录一、volatile关键字是什么二、volatile的引入三、volatile的特性1.volatile与可见性2.volatile与原子性3.volatile与有序性四、volatile面试相关一、volatile关键字是什么在日常的面试中,volatile无疑是被提到频率非常高的一个问题,在各大公众号中也充满了对volatile关键字的解析,那么volatile究竟是什么呢???都被应用在了哪些地方呢???首先在理解保留字方面,我觉得理解这个保留字的中文含义是有助于我们记忆的,那么打开原创 2020-12-02 13:56:10 · 471 阅读 · 10 评论 -
[多线程] -synchronized关键字入门(同步方法与同步代码块)
文章目录一、 线程安全问题二、synchronized简介1. 什么是synchronized2.什么是同步一、 线程安全问题线程安全问题使我们平时面试中总避不开会谈论的一个点,通常情况下线程安全问题都是由于非方法内的实例变量引起的。就比如我们举个很简单的例子:在描述线程的相关Demo中,我喜欢用银行相关的业务场景做举例,大多数和线程相关的知识点都能对应到银行需要用到的业务。就比如今天我会通过一个简单的银行排号系统的实现来解释今天的知识点。代码实现:public class BankLineU原创 2020-11-30 16:59:05 · 505 阅读 · 1 评论 -
[多线程] - 如何优雅的停止一个线程
文章目录一、 为什么要停止一个线程一、 为什么要停止一个线程原创 2020-11-24 15:49:35 · 898 阅读 · 2 评论 -
[多线程] -线程的基础概念入门
文章目录一、线程的基本概念1. 什么是线程?什么是进程?2. 线程和进程的详述(可跳过)3. Daemon Thread (守护线程)二、 Java线程的生命周期一、线程的基本概念1. 什么是线程?什么是进程?解释线程和进程比较枯燥的概念就是:进程是资源分配的基本单位,线程是CPU的调度的最小单位。这样的答案都太字面,抽象不太容易让人理解,所以我还是举一个曾经看到过的例子:如果说进程是一列拉载着数据信息的火车,那么线程就是一节一节的车厢。就像火车可以拥有多节车厢一样,一个进程可以拥有多个线程。原创 2020-11-17 14:31:05 · 273 阅读 · 1 评论 -
[多线程] - 从Thread类的构造函数分析创建一个线程需要的基本元素
文章目录一、Thread类的构造函数1.线程任务(Runnable)2. 线程名3. 线程组(ThreadGroup)4. 栈大小 (stackSize)二、总结三、Thread的小案例一、Thread类的构造函数在实际的开发中,如果我们想要启动一个新的线程任务需要怎么做?没错,就是调用Thread类的start()方法启动一个新的线程任务。那么一个Thread对象都需要哪些必要的条件作为新线程启动的基本元素呢?我们就可以在Thread类的构造函数下手分析。Thread t1 =new Thread(原创 2020-11-19 15:11:23 · 385 阅读 · 4 评论