
并发编程专题
文章平均质量分 95
天黑请闭眼丶风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
探究ThreadLocal和ThreadPoolExecutor中的内存泄露风险与防范策略
在多线程编程中,ThreadLocal和ThreadPoolExecutor是两个常用的工具类,但是它们也会带来内存泄露的风险。为了避免这种情况的发生,我们可以在使用完毕后手动删除变量或关闭线程池。希望本文能够对您有所帮助。原创 2023-07-13 09:36:38 · 3101 阅读 · 0 评论 -
并发编程十六:Future、CompletionService、CompletableFuture和Disruptor队列实战
文章目录Future、CompletionService、CompletableFuture和Disruptor队列实战Future案例CompletionService案例CompletionService原理应用场景CompletableFuture应用场景案例依赖关系案例and聚合关系or聚合关系异常处理CompletableFuture常用方法总结高性能队列Disruptor简介数据结构Disruptor核心概念Disruptor的使用案例Future、CompletionService、Comp原创 2022-04-01 15:52:26 · 1200 阅读 · 0 评论 -
并发编程十五:线程池任务类型和ForkJoin实战详解
文章目录线程池任务类型和ForkJoin实战详解线程池任务类型分治算法Fork/Join框架介绍Fork/Join使用Fork/Join实战案例RecursiveAction类型RecursiveTask类型CountedCompleterForkJoin原理分析ForkJoin流程图线程池任务类型和ForkJoin实战详解线程池任务类型我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用CPU和内存等资源,从而最大限度地提高程序的性能。在实际工作中,我们需要根据任务类型的不同选择对应的策略原创 2022-03-30 13:35:31 · 1299 阅读 · 2 评论 -
并发编程十四:阻塞队列blockingQueue实战及其原理分析 下
文章目录阻塞队列blockingQueue实战及其原理分析 下阻塞队列源码分析SynchronousQueuePriorityBlockingQueueDelayQueue如何选择适合的阻塞队列阻塞队列blockingQueue实战及其原理分析 下阻塞队列源码分析SynchronousQueueSynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作 put必须等待消费者的移除操作take。SynchronousQueue 最大的不同之处在于,它的容原创 2022-03-29 11:10:13 · 1056 阅读 · 0 评论 -
并发编程十三:阻塞队列blockingQueue实战及其原理分析 上
文章目录阻塞队列blockingQueue实战及其原理分析 上阻塞队列介绍阻塞队列源码分析ArrayBlockingQueueLinkedBlockingQueueLinkedBlockingDeque阻塞队列blockingQueue实战及其原理分析 上阻塞队列介绍Queue接口public interface Queue<E> extends Collection<E> { //添加一个元素,添加成功返回true, 如果队列满了,就会抛出异常 bool原创 2022-03-27 16:33:53 · 440 阅读 · 1 评论 -
并发编程十二:ReentrantReadWriteLock详解
ReentrantReadWriteLock详解ReentrantReadWriteLock简介现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个 线程同时读取共享资源(读读可以并发);但是如果一个线程想去写这些共享资源,就不应该 允许其他线程对该资源进行读和写操作了(读写,写读,写写互斥)。在读多于写的情况下, 读写锁能够提供比排它锁更好的并发性和吞吐量。针对这种场景,JAVA的并发包提供了原创 2022-03-24 16:03:02 · 512 阅读 · 0 评论 -
并发编程十一:CyclicBarrier详解
CyclicBarrier和ReentrantReadWriteLock详解CyclicBarrier字面意思回环栅栏(循环屏障),通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用...原创 2022-03-22 15:29:15 · 1081 阅读 · 0 评论 -
并发编程十:Semaphorer&CountDownLatch详解
Semaphorer&CountDownLatch&CyclicBarrie详解SemaphorerSemaphore,俗称信号量,它是操作系统中PV操作的原语在java的实现,它是基于AbstractQueuedSynchronizer实现的。Semaphore的功能非常强大,大小为1的信号量就类似于互斥锁,通过同时只能有一个线程获 取信号量实现。大小为n(n>0)的信号量可以实现限流的功能,它可以实现只能有n个线程同 时获取信号量。PV操作是操作系统一种实现进程互斥与同步的原创 2022-03-11 10:42:43 · 660 阅读 · 0 评论 -
并发编程九:深入理解AQS和ReentrantLock源码分析
深入理解AQS和ReentrantLock源码分析回顾下之前说到的管程模型MESA。这个模型当中有一个同步等待队列,获取锁失败的线程都会放入到这队列当中;还有一些条件等待队列,获取到锁的线程因为条件比如wait等待后,会进入条件等待队列。之前说了synchronized是jvm层面对管程的实现。现在来说下jdk层面如何实现管程。深入理解AQS既然在jvm层面实现了管程,为什么还要从jdk(java)层面实现呢?首先synchronized的加锁解锁都是自动的,如果像通过代码控制什么时候加锁,什么时候原创 2022-03-09 16:30:21 · 620 阅读 · 0 评论 -
并发编程八:深入理解synchronized(下)
深入理解synchronized(下)原创 2022-03-06 16:21:21 · 710 阅读 · 0 评论 -
并发编程七:深入理解synchronized(上)
深入理解synchronized(上)Java共享内存模型带来的线程安全问题public class SyncDemo { private static int count = 0; public static void increment(){ count++; } public static void decrement(){ count--; } public static void main(String[] args) throws InterruptedException原创 2022-02-24 18:46:52 · 946 阅读 · 2 评论 -
并发编程六:深入理解CAS和Atomic原子操作类介绍
深入理解CAS先来看下并发安全的例子public class CASdemo { public volatile static int a ; public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { for (int j = 0; j < 10000;原创 2022-02-22 15:18:21 · 1025 阅读 · 0 评论 -
并发编程五:java并发线程池底层原理详解和源码分析
java并发线程池底层原理详解和源码分析上篇分析了java线程。现在来分析java线程池。在分析线程池之前,先来思考下我们的线程是创建的越多越好吗,显然不是,我们为什么要使用线程池,用下面的例子来看下/*** * 使用线程的方式去执行程序 */public class ThreadTest { public static void main(String[] args) throws InterruptedException { Long start = System.cu原创 2022-02-16 18:46:31 · 735 阅读 · 0 评论 -
并发编程四:深入理解java线程
深入理解java线程线程基础知识进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中 还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 。当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个原创 2022-02-15 17:15:16 · 746 阅读 · 0 评论 -
并发编程三:深入理解并发List、Set、ConcurrentHashMap底层原理
深入理解并发List、Set、ConcurrentHashMap底层原理之前两篇分析了并发的三大特性和JMM模型,从硬件、jvm、java层面分别进行分析。JMM模型是并发当中最难理解的部分,涉及到的概念很多。本次分析经常使用到的集合的底层原理和数据结构。深入ArrayList分析ArrayList使我们经常使用到的List的实现类。先来看先它有什么特点。首先List的特点:元素有放入顺序,元素可重复 。ArrayList自然也有相同的特点。其次ArrayList的存储结构底层采用数组来实现的。原创 2022-02-13 19:20:19 · 1008 阅读 · 0 评论 -
并发编程二:深入理解JMM和并发三大特性(下)
文章目录并发编程二:深入理解JMM和并发三大特性(下)上篇回顾JMM在硬件层面上的分析cpu高速缓存缓存一致性缓存一致性案例说明并发编程二:深入理解JMM和并发三大特性(下)上篇回顾上篇说了并发发生问题的根源以及并发的三大特性都是:原子性、可见性、有序性。分析了JMM模型对内存交互的操作实现以及相关规则。分析了出现可见性问题的原因和过程,以及相关的解决方案。上篇分析了出现可见性问题是因为:当前线程对共享变量的操作会存在读不到,或者不能立即读到另一个线程对此变量的写操作。解决方式归纳为两种:在jv原创 2022-02-10 02:19:08 · 977 阅读 · 0 评论 -
并发编程一:深入理解JMM和并发三大特性(上)
文章目录深入理解JMM和并发三大特性(上)前言并发编程三特性JMM内存模型可见性深入分析总结深入理解JMM和并发三大特性(上)前言JMM属于整个Java并发编程中最难的部分也是最重要的部分(JAVA多线程通信模型——共享 内存模型),涉及的理论知识比较多,我会从三个维度去分析: JAVA层面、JVM层面 、硬件层面。在了解JMM和并发编程之前先来看看什么是并发,多线程有什么作用,并发编程出现bug的根本原因是什么。并发和并行并发和并行目标都是最大化CPU的使用率并行(parallel):指在同原创 2022-02-04 00:26:05 · 1342 阅读 · 0 评论