![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 97
知识分子_
QQ:1149513559
展开
-
ThreadLocal为什么存在内存泄漏,源码分析
详细介绍ThreadLocal的各种坑,内存泄漏的原因等原创 2023-12-27 11:46:39 · 956 阅读 · 0 评论 -
volatile是怎么保证可见性和有序性的,为什么无法保证原子性
在了解volatile之前,先认识一下JMM内存模型和并发编程的三大特性!1. JMM内存模型 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的是一组规则或规范。 与JVM内存模型不同的是,JMM规定所有变量都存储在主内存,主内存是共享内存区域,所有的线程都可以原创 2020-08-10 12:20:25 · 1847 阅读 · 3 评论 -
synchronized的使用和底层原理、锁状态的膨胀升级过程
1. synchronized介绍 synchronized内置锁是一种对象锁(锁的是对象而非引用),作用的粒度是对象,可以解决并发的原子性、一致性、有序性等问题,是可重入的。1.1 加锁的方式有三种:①:加在静态方法上,锁的对象是Class对象,只有一个!②:加在普通方法上,锁的是当前调用者这个对象,有多个!③:加载代码块上,锁的是括号里的对象!1.2 synchronized的发展史 原创 2020-08-10 17:46:23 · 726 阅读 · 0 评论 -
抽象同步器AQS、CAS应用之--ReentrantLock,lock和unlock的流程、源码分析
文章目录1. AQS和CAS2. ReentrantLock1. AQS和CAS多线程中经常听到AQS和CAS,他们究竟是什么呢?AQS: AbstractQueuedSynchronizer(AQS)抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等。CAS: compare and swap(CAS),比较与交换。在java语言之前,高并发已经在服务器领域有大量的应原创 2020-08-19 12:23:20 · 741 阅读 · 0 评论 -
线程和线程池七大参数、线程池分类、运行原理详解,线程池的使用场景
文章目录1. 线程2. 线程池1. 线程1.1线程 线程是调度CPU资源的最小单位,线程模型分为KLT模型与ULT模型,JVM使用的KLT模型,一个java线程对应一个OS线程,线程有多个生命状态①:NEW :新建②:RUNNABLE :运行③:BLOCKED :阻塞④:WAITING :等待⑤:TIMED_WAITING :超时等待⑥:TERMINATED :终结其中运行又分为 就绪、运行中原创 2020-08-31 12:32:10 · 5220 阅读 · 2 评论 -
抽象同步器AQS应用之--阻塞队列BlockingQueue,如何保证任务一定被消费?
文章目录1.阻塞队列简介1.阻塞队列简介1.1 什么是阻塞队列?阻塞队列是一个队列①:当队列是空的,从队列中获取元素的操作将会被阻塞,直到其他线程插入新元素②:当队列是满的,从队列中添加元素的操作将会被阻塞,直到其他线程取出队列元素1.1 阻塞队列和栈的区别?栈:先进后出、后进先出队列:先进先出1.3 阻塞队列有什么用处?在有阻塞队列之前,线程并发时,我们需要自己去控制什么时候阻塞线程,什么时候唤醒线程,还要兼顾效率和安全。增加开发难度。阻塞队列使我们不用关心线程的阻塞和唤醒,它帮我们原创 2020-08-20 10:43:07 · 643 阅读 · 0 评论 -
抽象同步器AQS应用之-- Semaphore、CountDownLatch、CyclicBarrier的介绍
文章目录1. Semaphore是什么?1. Semaphore是什么?Semaphore字面意思是信号量,作用是控制访问特定资源的线程数目,底层依赖AQS的state状态量,常用于限流等场景。原创 2020-08-20 17:56:34 · 401 阅读 · 0 评论 -
线程池中线程抛了异常如何处理?
文章目录1. 模拟线程池抛异常2. 如何获取和处理异常方案一:使用 try -catch方案二:使用Thread.setDefaultUncaughtExceptionHandler方法捕获异常方案三:重写afterExecute进行异常处理1. 模拟线程池抛异常 在实际开发中,我们常常会用到线程池,但任务一旦提交到线程池之后,如果发生异常之后,怎么处理? 怎么获取到异常信息?在了解这个问题之前,可以先看一下原创 2021-03-09 00:15:33 · 9497 阅读 · 0 评论 -
Atomic原子类和Unsafe魔法类 详解
文章目录1. Atomic原子类2. Unsafe魔法类1. Atomic原子类 在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用、原子更新字段。Atomic包里的类基本都是使用Unsafe实现的包装类。基本类型:AtomicInteger、AtomicLong、AtomicBoolean;数组类型:AtomicReference、AtomicRefe原创 2020-08-24 12:41:40 · 455 阅读 · 0 评论 -
多线程、线程池的创建方式,为什么阿里推荐自定义线程池?
1.多线程的四种实现方式 * 多线程的实现方式有四种 * 1.继承thread类 * 2.实现runnable接口 * 3.实现Callable * 实现Callable不能简单把Callable对象传给thread,要使用FutureTask做一次封装 * get()可以获取到call()返回值 * get()阻塞等待所有线程执行完,才输出 * 4.线程池通常在业务代码中前三种都不使用,只使用原创 2020-07-09 11:50:52 · 8656 阅读 · 0 评论