![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程笔记
文章平均质量分 89
多线程部分记录
一个很酷的女巫_
稳扎稳打,一步一个脚印。
展开
-
字体和font-family对照表
校招内推: 字节跳动2021春季校招内推码: NR6WYPP 投递链接: https://jobs.toutiao.com/s/eeSH1X3 社招私聊~ 进入原文查看字体效果 windows常见内置中文字体 字体中文名字体英文名字体应用宋体SimSun中文名...转载 2022-04-27 17:36:43 · 1210 阅读 · 0 评论 -
【JUC】JUC下的经典类
JUC下的典型类一、Semaphore 信号量二、 CountDownLatch 计数器三、CyclicBarrier 循环屏障java.util.concurrent简称JUC类,JUC下有几个典型类:ReentrantLockSemaphoreCountDownLatchCyclicBarrierReentrantLock可重入锁,在前面已经进行过讲解,可以去看看常见锁策略一、Semaphore 信号量Semaphore信号量,它的执行策略是设置一个具有n个许可证的信号量,当有任务时原创 2022-04-27 14:11:04 · 467 阅读 · 0 评论 -
【多线程】线程池的七种创建方式,线程池的拒绝策略,线程池看这篇就够了
线程池一、线程存在的问题二、什么是线程池?三、线程池的优点四、线程池的使用4.1 固定数量的线程池4.2 线程工厂一、线程存在的问题之前我们已经学习过了线程,线程的创建方式我们讲了7种,感兴趣的小伙伴可以去看看前面的讲解。线程的创建那么我们学习了那么多关于线程的知识,为什么还要再用到线程池呢?那么我们就要来思考一下,线程有什么问题吗?首先,每次有任务来时就要创建线程,任务结束就要将这个线程销毁,频繁的创建和销毁需要一定的开销。当任务数远远大于线程可以承载的数量之后,不能友好的进行任务拒绝。因原创 2022-04-26 17:31:55 · 8280 阅读 · 1 评论 -
多线程-常见锁策略+CAS(锁的进阶知识)
常见锁策略一、乐观锁 & 悲观锁1.1 乐观锁的定义1.1.1乐观锁的实现-CAS1.1.2 CAS的应用1.1.3 CAS存在的问题1.1.4 ABA问题1.1.5 ABA问题的解决方案1.2 悲观锁二、公平锁和非公平锁一、乐观锁 & 悲观锁1.1 乐观锁的定义乐观锁,顾名思义,他比较乐观,他认为**一般情况下不会出现冲突,所以只会在更新数据的时候才会对冲突进行检测。**如果没有发生冲突直接进行修改,如果发生了冲突则不进行任何修改,然后把结果返回给用户,让用户自行处理。1.1.1乐原创 2022-04-24 16:29:13 · 1219 阅读 · 0 评论 -
【Java设计模式】校招最常考的单例模式
单例模式一、什么是单例模式?二、单例模式的类型2.1 饿汉模式2.2 懒汉模式2.2.1 普通懒汉模式2.2.2 DCL版懒汉模式2.2.3 使用volatile防止指令重排序三、枚举实现单例模式一、什么是单例模式?单例(Singleton)模式:指的是在内存中只会创建一次且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁的创建对象使内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。这种模式的好处在于:减少了系统的开销;有原创 2022-04-22 19:44:51 · 320 阅读 · 0 评论 -
【LockSupport】线程的休眠和指定唤醒
LockSupport一、LockSupport1.1 LockSupport.parkUntil(long)1.2 LockSupport和Interrupt1.3 LockSupport与Object的wait/notify在上篇文章中我们讲了线程通讯的三个方法,感兴趣的小伙伴可以去看看。线程通讯(wait、notify、notifyAll)一、LockSupport除了上篇文章中讲的,使用LockSupport也可以使线程休眠和唤醒。主要包含两个常用方法:LockSupport.park(原创 2022-04-21 10:52:30 · 642 阅读 · 0 评论 -
多线程-线程通讯【线程的通知和唤醒wait()、notify()/notifyAll()】
由于多个线程之间是抢占执行的,因此线程之间执行的先后顺序难以预知,但我们在实际的开发过程中,我们希望能够合理的协调多个线程之间的执行先后顺序。这就引出了完成这个协调工作的三个方法:wait()/wait(long timeout):让当前线程进入等待状态。notify():唤醒在当前对象上等待的一个线程notifyAll():唤醒在当前对象上等待的所有线程。一、wait()方法的使用wait()执行流程:使当前线程进入休眠状态(将线程放入等待队列中)释放当前的锁满足一定条件时被唤醒,原创 2022-04-21 10:03:58 · 2795 阅读 · 3 评论 -
多线程-线程安全问题的解决
在上一篇文章中,我们说了线程原创 2022-04-12 16:20:15 · 859 阅读 · 0 评论 -
【多线程】死锁详解
一、什么是死锁死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法进行下去。也就是说两个线程在拥有锁的情况下,又尝试获取对方的锁,从而导致程序进入阻塞状态。手撕死锁代码(面试常考)~import java.util.concurrent.TimeUnit;/** * 死锁示例 */public class ThreadDemo17 { public static void main(String[] args) {原创 2022-04-18 17:45:46 · 4044 阅读 · 0 评论 -
多线程-线程的创建、中断、等待、休眠和获取线程引用
今天来总结下Thread类的用法,包括Thread的创建、中断、等待、休眠以及获取线程实例的用法。目录一、线程的创建1.1继承Thread1.1.1通过继承Thread类来创建线程1.1.2 变种方法11.1.3 启动线程——start()方法1.1.3 start()和run()的区别1.2实现Runnable接口1.2.1 基础实现Runnable接口1.2.2 变种方法1:匿名实现Runnable接口1.2.3 变种方法2:使用Lambda表...原创 2022-03-25 23:34:57 · 1374 阅读 · 0 评论 -
面试常问——进程和线程的区别
最近学习到了Java的多线程部分,了解到了进程和线程的相关概念,下面我们来介绍一下进程和线程吧。目录一、进程二、线程三、进程VS线程一、进程进程是操作系统资源分配的最小单元。一个进程拥有的资源有⾃⼰的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB(Process Control Block)进程控制块的结构体。进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看作程序运行的一次运行过程。程序VS进程:原创 2022-03-22 00:52:00 · 57127 阅读 · 3 评论 -
Thread常用构造方法及属性
前面介绍了Thread的Thread的创建,现在我们就来了解以下Thread的常用构造方法和属性~一、Thread常用构造方法方法 说明 Thread() 创建线程对象 Thread(Runnable target) 使⽤ Runnable 对象创建线程对象 Thread(String name) 创建线程对象,并命名 Thread(Runnable target, String name) 使⽤ Runnable 对象创建线程对象,并命名 Th原创 2022-03-27 12:49:44 · 1743 阅读 · 0 评论 -
多线程-wait和sleep的区别
目录一、wait VS sleep二、wait(0) VS sleep(0)一、wait VS sleep1. 相同点① 都可以让线程进入休眠状态。② 都可以相应interrupt中断请求。响应中断请求:public class WaitSleepDemo { public static void main(String[] args) throws InterruptedException { Object lock=new Objec原创 2022-04-12 17:07:26 · 3576 阅读 · 0 评论 -
Java线程的几种状态及线程安全问题
目录一、线程状态1.1 所有线程状态1.2 线程状态的转移二、线程安全性问题2.1 线程安全的概念2.2 线程不安全的原因2.2.1 抢占式执行2.2.2 多个线程修改同一个变量2.2.3 非原子性操作2.2.4 内存可见性2.2.5 指令重排序一、线程状态1.1 所有线程状态线程的状态是一个枚举类型 Thread.Statepublic class ThreadState { public static void mai...原创 2022-03-27 17:31:44 · 992 阅读 · 2 评论