
Java 并发编程
文章平均质量分 96
跟随《Java并发编程之美》,整理并发相关知识。
Ang Ga Ga
Rush!投入/专注/我永远爱Java。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发包工具之 批量处理任务 CompletionService(异步)、CompletableFuture(回调)
批量处理任务 CompletionService(异步)、CompletableFuture(回调)原创 2023-02-13 18:11:07 · 2056 阅读 · 1 评论 -
并发编程实战(三)线程池、ThreadLocal使用注意事项
文章目录一、创建线程和线程池时要指定与业务相关的名称一、创建线程和线程池时要指定与业务相关的名称 在日常开发中,当在一个应用中需要创建多个线程 或者 线程池时,最好给每个线程 或者 线程池 根据业务类型 设置具体名称,以便在出现问题时方便进行定位。例1 ???? 创建线程需要有线程名:public class ThreadTest1 { public static void main(String[] args) { // 订单模原创 2020-12-03 18:56:23 · 816 阅读 · 0 评论 -
并发编程实战(二)ConcurrentHashMap、SimpleDateFormat 、Timer 使用注意事项
文章目录一、并发组件 ConcurrentHashMap 使用注意事项二、SimpleDateFormat 是线程不安全的三、使用 Timer 时需注意的事项一、并发组件 ConcurrentHashMap 使用注意事项 ConcurrentHashMap 虽然为 并发安全的组件,但是 使用不当 仍然会导致程序错误。 这里借用直播的一个场景,在直播业务中,每个直播间对应一个 topic,每个用户进入直播间时原创 2020-12-01 20:27:50 · 408 阅读 · 2 评论 -
并发编程实战(一) logback 异步日志打印模型中ArrayBlockingQueue 的使用、Tomcat 的 NIOEndPoint 中 ConcurrentLinkedQueue 的使用
文章目录一、 ArrayBlockingQueue 的使用1、异步日志打印模型概述2、异步日志与具体实现(1) 异步日志一、 ArrayBlockingQueue 的使用 logback 异步日志打印中 ArrayBlockingQueue 的使用:1、异步日志打印模型概述 在高并发、高流量 并且 响应时间要求比较小的系统中 同步打印日志 已经满足不了需求了,因为 打印日志本身是需要写磁盘的,写磁盘的操作 会原创 2020-11-28 14:21:00 · 1963 阅读 · 0 评论 -
Java 并发包中线程同步器原理剖析
文章目录一、CountDownLatch1、使用2、类图3、实现原理探究(1) void await() 方法(2) await(long timeout, TimeUnit unit) 方法(3) void countDown() 方法(4) getCount() 方法二、回环屏障 CyclicBarrier1、使用一、CountDownLatch 在日常开发中,可能会遇到 需要在主线程中 开启多个线程 去执行任务,并且 主线程需要等待 所有子线程执行完毕原创 2020-11-26 22:01:21 · 390 阅读 · 0 评论 -
Java 并发包中 ScheduledThreadPoolExecutor 原理探究
ScheduledThreadPoolExecutor 是一个 可以在指定延迟时间后 或者 定时进行任务调度执行 的线程池。文章目录一、类图二、原理剖析(1) schedule(Runnable command, long delay, TimeUnit unit) 方法一、类图 可以看到,ScheduledThreadPoolExecutor 继承自 ThreadPoolExecutor ,并实现了 S原创 2020-11-26 10:31:25 · 653 阅读 · 2 评论 -
Java 并发包中线程池 ThreadPoolExecutor 原理探索
线程池主要解决两个问题:一是 执行大量异步任务 时,线程池能够提供较好的性能,没当需要执行异步任务时 直接 new 一个线程来运行,而线程的创建 和 销毁是需要开销的。线程池里的线程是 可复用 的,文章目录...原创 2020-11-25 20:42:12 · 221 阅读 · 0 评论 -
Java 并发包中并发队列原理剖析(二)ArrayBlockingQueue、PriorityBlockingQueue、DelayQueue
文章目录一、ArrayBlockingQueue1、类图2、ArrayBlockingQueue 原理(1) offer 操作(2)put 操作(3)poll 操作(4)take 操作(5)peek 操作(6)size 操作二、PriorityBlockingQueue1、类图2、PriorityBlockingQueue 原理(1) offer 操作扩容逻辑建堆算法(2) poll 操作一、ArrayBlockingQueue1、类图 可以看到,Arr原创 2020-11-24 19:44:23 · 571 阅读 · 0 评论 -
Java 并发包中并发队列原理剖析(一)ConcurrentLinkedQueue、LinkedBlockingQueue
JDK 提供了一系列场景的并发安全队列。总的来说,按照实现方式的不同 可分为 阻塞队列 和 非阻塞队列,前者使用锁????实现,后者使用 CAS 非阻塞算法实现。文章目录一、ConcurrentLinkedQueue1、类图2、ConcurrentLinkedQueue 原理介绍(1) offer 操作(2)put 操作(3)poll 操作一、ConcurrentLinkedQueue Concurrent原创 2020-11-22 22:30:40 · 403 阅读 · 0 评论 -
Java 并发包中锁原理剖析(二) 独占锁 、读写锁 、StampedLock 原理
独占锁 ReentrantLock、读写锁 ReentrantReadWriteLock。文章目录一、独占锁 ReentrantLock1、类图结构2、获取锁(1)void lock() 方法非公平锁公平锁(2)void lockInterruptibly() 方法(3)boolean tryLock() 方法(4)tryLock(long timeout, TimeUnit unit) 方法3、释放锁void unlock() 方法二、读写锁 ReentrantReadWriteLock1、类图2、写锁原创 2020-11-21 12:53:28 · 253 阅读 · 0 评论 -
Java 并发包中锁原理剖析(一) LockSupport 类、抽象同步队列 AQS
文章目录一、LockSupport 工具类1、void park() 方法2、void unpark(Thread thread) 方法3、void parkNanos(long nanos) 方法jstack pid 命令的使用4、void parkUntil(Object blocker,long deadline) 方法二、抽象同步队列 AQS 概述1、AQS——锁的底层支持(1) AQS 类图(2)条件变量 ConditionObject2、AQS——条件变量的支持(1)await() 方法(2)s原创 2020-11-18 16:51:20 · 684 阅读 · 2 评论 -
Java 并发包中并发 List 源码剖析
并发包中的 并发 List 只有 CopyOnWriteArrayList,它是个线程安全的 ArrayList,对其进行的修改都是在底层的一个复制的数组(快照????【关于指定数据集合的一个完全可用拷贝】)上进行的,也就是使用了 写时复制 策略。文章目录一、CopyOnWriteArrayList 类图二、CopyOnWriteArrayList 主要方法源码分析1、 初始化2、添加元素3、删除元素4、获取指定位置元素- 写时复制产生的弱一致性问题5、修改原创 2020-11-16 17:18:48 · 472 阅读 · 0 评论 -
Java 并发包中原子操作类原理剖析
JUC 包提供了一系列原子性操作类,这些类都是使用非阻塞算法 CAS 实现的,相比使用锁实现,原子性操作 在性能上 有很大提高。文章目录一、原子操作类1、 递增 和 递减操作代码2、compareAndSet 方法二、JDK 8 新增的原子操作类 LongAdder1、LongAdder 类图一、原子操作类 JUC包中提供了 AtomicInteger、AtomicLong 、AtomicBoolean 一原创 2020-11-16 10:53:22 · 522 阅读 · 0 评论 -
ThreadLocal类、ThreadLocalRandom 类原理剖析
文章目录一、ThreadLocal 类一、ThreadLocal 类 多线程访问同一个共享变量时,特别容易出现 并发问题,特别是 在多个线程 需要对 一个共享变量 进行 写入 时 。为了保证线程安全,一般会在访问共享变量时,进行适当的同步。 同步的措施一般是加锁,这就需要使用者对锁有一定的了解,这显然加重了使用者的负担。而 ThreadLocal 的作用:当创建一个变量后,每个线程对其进行访问的时候,访问的是自原创 2020-11-13 23:01:16 · 529 阅读 · 0 评论 -
并发编程线程基础(二)
多线程并发编程 并发 是指 同一个时间段内 多个任务 同时都在执行,且都没有执行结束,而 并行 是说 单位时间内 多个任务 同时在执行。 并发任务 强调在同一时间段内 同时进行,而 一个时间段 由 多个单位时间 累积而成。所以说 ,并发的多个任务 在单位时间内,不一定同时在执行。 如:线程 A 和 线程 B 各自在自己的 CPU 上执行任务,就可以实现 并行运行。而在多线程编程实践中,线程的个数往往多于 CPU原创 2020-11-12 08:34:50 · 558 阅读 · 5 评论 -
并发编程线程基础(一)
文章目录1、关于进程与线程的理解:2、线程创建与运行1、关于进程与线程的理解: 进程是操作系统对资源进行分配、调度的单位,操作系统在分配资源时是把资源分配给进程的,对于CPU资源比较特殊,线程是调度 CPU资源的基本单位。 操作系统中一个程序的执行周期叫进程;每个程序有很多任务构成,每一个任务都是一个线程,进程中的多个线程共享进程的资源。 在 J原创 2020-11-11 10:56:37 · 227 阅读 · 0 评论