多线程
文章平均质量分 85
李王家的翠花
IT小屌丝
展开
-
多线程与高并发(17)——多线程总结(很全)
总结并复习了一下之前写的多线程的知识,见下图。不够清楚可私信或者processOn。原创 2023-07-27 20:08:28 · 296 阅读 · 0 评论 -
JVM系列(7)——java内存模型
先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。原创 2023-07-19 17:13:54 · 977 阅读 · 0 评论 -
多线程与高并发(16)——线程池原理(ThreadPoolExecutor源码)
ThreadPoolExecutor使用了AQS、位操作、CAS操作等。原创 2023-01-06 15:19:43 · 446 阅读 · 0 评论 -
多线程与高并发(15)——线程池详解(非源码层面)
本篇文章就基于ThreadPoolExecutor 这个类来展开总结线程池。原创 2022-12-27 18:44:01 · 433 阅读 · 0 评论 -
多线程与高并发(14)——Executor框架(线程池基础)
工作单元和执行单元分开,工作单元包括Runnable和Callable,利用Executor来执行任务。通过 Executor来启动线程更易管理,效率更好,助于避免 this 逃逸问题。原创 2022-12-08 17:05:08 · 525 阅读 · 0 评论 -
多线程与高并发(13)——Java常见并发容器总结
本文总结常见的并发容器,包含ConcurrentHashMap、CopyOnWriteArrayList 、ConcurrentLinkedQueue、BlockingQueue 、ConcurrentSkipListMap,本文仅做简单的总结,不做详细的源码分析。原创 2022-11-30 17:24:16 · 847 阅读 · 0 评论 -
多线程与高并发(12)——经典面试题之写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用
写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用。原创 2022-08-11 17:27:10 · 227 阅读 · 0 评论 -
多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
实现一个容器,提供两个方法,add,size。写两个线程,线程 1 添加 10 个元素到容器中,线程 2 实现监控元素的个数,当个数到 5 个时,线程 2 给出提示并结束。原创 2022-08-09 17:57:05 · 291 阅读 · 0 评论 -
多线程与高并发(10)——ThreadLocal解析
每个Thread中都具备一个ThreadLocalMap,而ThreadLocalMap可以存储以ThreadLocal为 key ,Object 对象为 value 的键值对。原创 2022-07-11 16:52:04 · 405 阅读 · 0 评论 -
多线程与高并发(9)——AQS其他同步组件(Semaphore、ReentrantReadWriteLock、Exchanger)
Semaphore、Exchanger、ReentrantReadWriteLock,本文将逐一讲解,同时会总结一下LockSupport用法。原创 2022-07-06 17:47:44 · 157 阅读 · 0 评论 -
多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
通过CountDownLatch 总结AQS共享锁的原理,同时对比下CyclicBarrier和Phaser。原创 2022-07-05 20:29:05 · 247 阅读 · 0 评论 -
多线程与高并发(7)——从ReentrantLock到AQS源码(两万字大章,一篇理解AQS)
本文从ReentrantLock一步步从源码的角度剖析了AQS加锁解锁的过程。原创 2022-06-29 15:48:08 · 296 阅读 · 1 评论 -
多线程与高并发(6)——CAS详解(包含ABA问题)
一、乐观锁和悲观锁乐观锁和悲观锁都是用于解决并发场景下的数据竞争问题,不局限于某种编程语言或数据库。1、乐观锁:就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁的实现方式:主要有两种,一种是CAS机制,一种是版本号机制。(1)版本号机制:在数据中增加一个version字段用来表示该数据的版本号,每当数据被修改版本号就会加1。当某个线程查询数据的时候,会将该数据的版本号一起读取出来,之后在该线程需要更新该数据的时候,原创 2022-05-20 17:44:27 · 762 阅读 · 0 评论 -
多线程与高并发(5)——volatile关键字详解
本文主要从volatile关键字的两大特性来总结。1、保证线程可见性;2、禁止指令重排序。一、保证线程可见性可见性是什么,我们看之前的一篇文章:多线程与高并发(2)——synchronized用法详解。这里我们直接拿过来看:1、线程可见性当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。从上图可以看到,java内存模型中,是依赖主内存来实现可见性,修改时新值同步到主内存,读取也是从主内存刷新变量值。无论是普通变量还是volatile变量都是如此,但是两者的区别是:volatile的原创 2022-05-16 17:37:41 · 228 阅读 · 0 评论 -
多线程与高并发(4)——对象头和锁升级
本文主要总结对象头以及锁升级的过程。原创 2022-05-16 14:28:38 · 272 阅读 · 0 评论 -
多线程与高并发(3)——synchronized原理
synchronized用法参考上一篇文章,里面也详细讲了原子性、可见性和互斥性。本文主要总结synchronized的原理和锁优化。synchronized的同步块对同一条线程来说是可重入的,不会出现自己把自己锁死的问题。一、java对象头...原创 2022-04-22 17:47:47 · 528 阅读 · 0 评论 -
多线程与高并发(2)——synchronized用法详解
这篇文章主要总结synchronized的用法,考虑到篇幅和方便自己记忆,synchronized的原理会在下篇文章详细总结。一、定义Synchronized是Java中常用的一个关键字。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码。——原子性(2)保证共享变量的修改能够及时可见。——可见性(3)有效解决重排序问题。——有序性二、基础理论这里只总结几大特性的基础理论,会在后续文章中陆陆续续结合关键字或者实例来讲解下面的特性。1、共享性在多线程编程中,数据共享原创 2021-12-14 18:00:53 · 1173 阅读 · 1 评论 -
多线程与高并发(1)——线程的基本知识(实现,常用方法,状态)
一、线程的实现方式线程的实现方式有以下几种:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法3.通过Callable和FutureTask创建线程4.通过线程池创建线程原创 2021-11-24 11:43:27 · 593 阅读 · 0 评论