![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
传说中的靖哥哥
小小程序员一枚
展开
-
并发编程(十六):线程池
一,ThreadPoolExecutor 概述1,线程池优势 在Java中,如果每个请求到达就创建一个线程,创建线程和销毁线程对系统资源的消耗都非常大,甚至可能比实际业务处理消耗的资源都大。同时,如果在JVM中创建太多的线程,也可能由于过度消耗内存或调度切换从而导致系统资源不足。 为了解决上面提出的问题,就有了线程池的概念。线程池,就是在一个线程容器中提前放置一定量的初始化...原创 2019-10-08 00:07:05 · 254 阅读 · 0 评论 -
并发编程(十五):原子操作之AtomicInteger
一,Atomic 概述1,原子类 * JUC中提供了一系列原子类,通过CAS在多线程环境下来保证原子操作,此处只对 AtomicInteger进行简单分析2,常用API * 同时,Atomic类提供了一系列API来保障原子操作,但是殊途同归,底层都是通过CAS来实现,只是提供了更多的功能而已,此处仅列出部分。可以看到涉及常规的数据变更3,功能DEMO ...原创 2019-10-08 00:03:05 · 188 阅读 · 0 评论 -
并发编程(十四):阻塞队列之LinkedBlockingQueue
一,关联源码链接 *并发编程(四):AbstractQueuedSynchronizer源码分析 *并发编程(五):AQS之重入锁ReentrantLock *并发编程(七):AQS之Condition二,LinkedBlockingQueue 概述1,LinkedBlockingQueue LinkedBlockingQueue 底层通过链表...原创 2019-10-07 23:58:24 · 547 阅读 · 0 评论 -
并发编程(十三):阻塞队列之ArrayBlockingQueue
一,关联源码链接 *并发编程(四):AbstractQueuedSynchronizer源码分析 *并发编程(五):AQS之重入锁ReentrantLock *并发编程(七):AQS之Condition二,ArrayBlockingQueue 概述1,ArrayBlockingQueue ArrayBlockingQueue 是通过数组实现的FI...原创 2019-10-07 23:57:51 · 524 阅读 · 0 评论 -
并发编程(十二):ConcurrentHashMap源码分析
一,ConcurrentHashMap概述1,ConcurrentHashMap * ConcurrentHashMap 和 HashMap 原理基本一致,就是在 HashMap 的基础上增加了锁处理,支持并发操作,在实现上比 HashMap 更复杂点。先比较与 JDK7,JDK8在实现上,修改原来通过 Segment 进行加锁的方式改为通过 Node 进行加锁,同时在链表方面,如果...原创 2019-10-07 23:56:43 · 219 阅读 · 0 评论 -
并发编程(十一):ThreadLocal源码分析
一,ThreadLocal概述1,TheadLocal —— 线程隔离对象 * JDK内部提供了线程隔离对象 ThreadLocal ,注意该类与AQS或者JUC基本没有关系。线程对 ThreadLocal 操作,实际上对线程属性 threadLocals 进行操作,该属性是 ThreadLocal 内部类 ThreadLocalMap 的实例。ThreadLocal 底层通过 Th...原创 2019-10-07 23:56:10 · 156 阅读 · 0 评论 -
并发编程(十):AQS之CyclicBarrier
一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,CyclicBarrier介绍 1,线程处理 * CyclicBarrier 的字面意思就是循环屏障。在一组线程到达循环屏障时阻塞,直到最后一个线程到达屏障时,屏障才会放开,让所有线程执行。该类可以与 CountDownLatch进行类比,功能基本一致。不同点在...原创 2019-10-07 23:55:13 · 316 阅读 · 0 评论 -
并发编程(九):AQS之Semaphore
一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,Semaphore介绍 1,线程访问控制 Semaphore 也就是我们常说的信号灯,通过初始化的信号量控制同时访问线程的个数。在线程调用 acquire() 方法时,会获取到一个许可,作为通行证继续进行线程执行,等线程执行完成后,通过调用 release() 方...原创 2019-10-07 23:54:40 · 156 阅读 · 0 评论 -
并发编程(八):AQS之CountDownLatch
一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,CountDownLatch介绍 1,线程控制 * CountDownLatch 是一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作执行完毕再执行。从命令可以解读 CountDown 是倒数的意思,类似于倒计时的概念。在API层面,CountDow...原创 2019-10-07 23:54:09 · 177 阅读 · 0 评论 -
并发编程(七):AQS之Condition
一,底层AQS源码分析:并发编程(四):AbstractQueuedSynchronizer源码分析二,Condition介绍 1,线程通信 * 在synchronized 中,有分析过通过 wait()/notify()/notifyAll()实现线程通信。同样,在JUC中,也提供了这样的工具类,就是Conditon 2,类图 ...原创 2019-10-07 23:53:11 · 257 阅读 · 0 评论 -
并发编程(六):AQS之读写锁ReentrantReadWriteLock
一,AQS源码博文:并发编程:AbstractQueuedSynchronizer源码分析二,ReentrantReadWriteLock读写锁介绍1,读写锁介绍 ReentrantReadWriteLock 虽然与 ReentrantLock 没有直接关系,但是在功能上算是对 ReentrantLock 的扩展。在 ReentrantLock 重入独占锁的功能上,添加了共享锁...原创 2019-10-07 23:52:24 · 269 阅读 · 0 评论 -
并发编程(五):AQS之重入锁ReentrantLock
一,AQS源码博文:并发编程:AbstractQueuedSynchronizer源码分析二,ReentrantLock重入锁基本介绍 1,类图 * 从图中可以看到,ReentrantLock是顶层锁接口Lock的实现类,并实现了Lock所定义的关于锁操作的基本API * ReentrantLock内部定义了三个有继承关系的内部类,Sync,F...原创 2019-10-06 23:45:35 · 170 阅读 · 0 评论 -
并发编程(四):AbstractQueuedSynchronizer源码分析
一,AQS 1,AQS是JUC的核心功能组件,主要通过FIFO双向链表特性对进行park()和unpark()操作来实现线程阻塞和线程唤醒。AQS主要提供了两种功能,独占和共享。 * 独占锁:独占锁,每次只能有一个线程持有锁,比如ReentrantLock 就是以独占方式实现的互斥锁 * 共享锁:允许多个线程同时持有锁,并发访问共享资源...原创 2019-09-29 21:59:31 · 250 阅读 · 0 评论 -
并发编程(三):Volatile关键字
一,一段代码引发可见性思考 1,代码片段:从代码可以看出,子线程会一直在循环中阻塞,当主线程已经修改flag的值为true后,子线程并没有对flag值做同步修改。当给flag加上volatile关键字修饰后,则子线程会获取到最新的flag值,并打印出结果(不做演示)package com.gupao;/** * @author pj_zhang * @create 2019...原创 2019-09-26 22:35:25 · 155 阅读 · 0 评论 -
并发编程(二):Synchornized关键字
一,Synchorized语法演示 1,类方法演示;静态类同步是对类对象加锁,基于同一类对象的操作都会在阻塞队列等待执行(通过自定义类加载器可以实现类的不同加载)package com.gupao.concurrent;/** * 类同步方法 * @author pj_zhang * @create 2019-09-25 21:55 **/public class S...原创 2019-09-26 00:02:41 · 229 阅读 · 3 评论 -
并发编程(一):初识多线程及线程通信
一,线程三种启动方式 1,Thread方式package com.gupao.concurrent;/** * @author pj_zhang * @create 2019-09-24 21:06 **/public class StartThread extends Thread { @Override public void run() { ...原创 2019-09-24 23:59:10 · 121 阅读 · 0 评论