![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
黑洞刺客
这个作者很懒,什么都没留下…
展开
-
CompletableFuture使用详解
CompletableFuture引入CompletableFuture是java8引入的一个用于异步编程的工具类。我们根据CompletableFuture的简单示例来逐步介绍它的强大功能。 final CompletableFuture<String> cf = new CompletableFuture<String>(); T...原创 2020-05-07 15:52:24 · 1353 阅读 · 2 评论 -
java读写锁ReentrantReadWriteLock源码分析
ReentrantReadWriteLock简介①读写锁在同一时刻可以允许多个读线程访问,但在写线程访问时,所有的读线程和其他写线程均被阻塞。保证了写操作对读操作的可见性②读写锁维护了一对锁,一个读锁和一个写锁,分离读写锁提升并发性能③一般情况下,读写锁比排它锁有更好的吞吐量和并发性ReentrantReadWriteLock特性公平性:支持公平和非公平获取锁方式,非公平吞吐量优于公平重...原创 2020-02-19 12:56:16 · 472 阅读 · 0 评论 -
浅析线程
线程与进程进程具有一定独立功能的程序,它是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈。两者关系一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。同一进程的所有线程共享该进程的资源。线程是进程内的...原创 2020-02-08 18:12:40 · 240 阅读 · 0 评论 -
java线程池 - Executor框架源码解析
为何使用线程池技术1.线程是重量级资源,线程创建、销毁需要耗费较大的性能,因此重复使用线程能极大地改善程序性能。2.线程并不是越多越好,线程数量和性能呈抛物线关系,而且通过new Thread方式创建的线程无法很好地进行管控。3.new Thread方式创建的线程不利于扩展,比如定时、定期执行任务,线程中断。线程池如何提升性能主要是避免了线程的创建、销毁这部分时间的耗费1.普通线程执行某...原创 2020-02-05 16:56:34 · 255 阅读 · 0 评论 -
FutureTask源码解析二
本篇主要介绍FutureTask源码我们知道FutureTask实现了RunnableFuture接口,即Runnable接口和Future接口,Runable可以对应FutureTask的task,表示FutureTask本质上也是一个task任务,而Future对应FutureTask中的Future,表示了我们对于这个task任务可以执行某些操作,如判断任务是否执行完毕,获取任务的执行结果...原创 2020-01-18 20:07:21 · 351 阅读 · 0 评论 -
FutureTask源码解析一
考虑到文章篇幅过长,分为两篇讲解本片主要介绍FutureTask涉及的一些接口和基本知识FutureTask简介FutureTask是一种可取消的异步计算任务,它实现了Future接口,代表了异步任务的返回结果。从而FutureTask可以启动和取消异步计算任务、查询异步计算任务是否完成和获取异步计算任务的返回结果。只有异步计算任务结束时才能获取返回结果,当异步计算任务还未结束时调用get...原创 2020-01-18 16:09:46 · 206 阅读 · 0 评论 -
ThreadGroup线程组
ThreadGroup简介顾名思义,线程组是多个线程的集合,可以对一批线程或线程组进行统一管理,比如中断interrupt(),destroy()。另外可以准确的定位到某个线程和进行统一的异常捕获。一个线程组中可以有线程,也可以有线程组,所以线程组的结构有点类似于树,如下所示下面通过代码来看,线程组的树形结构 public static void main(String[] a...原创 2020-01-17 21:38:58 · 378 阅读 · 0 评论 -
ThreadLocal原理分析
ThreadLocal简介ThreadLocal线程本地变量的副本,对一个线程内的变量的修改不影响其它线程的变量。即在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。①ThreadLocal实例通常在类中被定义为private static②ThreadLocal在线程的生命周期内起作用③空间换时间的设计思想ThreadLocal用法首先了解下ThreadLocal的基本用法...原创 2020-01-15 22:34:46 · 266 阅读 · 0 评论 -
AQS源码分析三
第一篇基于ReentrantLock公平锁分析了AQS的核心第二篇主要分析了Condition的实现原理以及线程中断的使用该篇主要的关注点是AQS的共享模式本文主要基于CountDownLatch来分析AQS的共享模式,同时分析了CyclicBarrier、Semaphore。CountDownLatchCountDownLatch是一个典型的AQS共享模式的使用使用场景:比如有N个任务,...转载 2020-01-11 16:43:54 · 148 阅读 · 0 评论 -
AQS源码分析二
上一篇讲解了从ReentrantLock公平锁源码了解AQS主要实现原理本文关注以下几点内容①深入理解ReentrantLock公平与非公平锁区别②深入分析AQS的内部类ConditionObject③深入理解Java线程中断和InterruptedException异常公平锁和非公平锁// 默认采用非公平锁public ReentrantLock() { sync = ne...转载 2020-01-08 21:48:48 · 138 阅读 · 0 评论 -
AQS源码分析一
AbstractQueuedSynchronizer(简写AQS)这个抽象类,它是Java并发包的基础工具类,是实现ReentrantLock、CountDownLatch、Semaphore、FutureTask等类的基础。本文将从ReentrantLock公平锁源码出发,分析下AbstractQueuedSynchronizer工作原理AQS结构AQS属性及含义// 头结点,你可以理...转载 2020-01-06 22:16:03 · 137 阅读 · 0 评论 -
java并发编程之Executor框架
Executor框架结构 ①任务:需要实现的接口:Runnable和Callable。 ②任务的执行:任务执行核心顶层接口Executor,继承自Executor的ExecutorService接口,Executor框架的两个关键类实现了了ExecutorService(ThreadPoolExecutor和ScheduledThreadPoolExecutor)。 ③异步计算的结果:接口...原创 2019-01-31 12:31:55 · 271 阅读 · 0 评论 -
java并发编程之ConcurrentHashMap
ConcurrentHashMap简介 为何要使用ConcurrentHashMap? Hashtable效率低下,方法阻塞。 HashMap线程不安全,扩容并发情况下get死循环。 ConcurrentHashMap采用分段锁技术提高并发性能。 HashMap和Hashtable比较 ①接口继承类 HashMap是继承自AbstractMap类,而HashTable...原创 2019-01-30 14:29:14 · 461 阅读 · 0 评论 -
LockSupport
LockSupport简介LockSupport用来实现线程的挂起和唤醒,它是Java6引入的一个工具类,它简单灵活,应用广泛,同时也是构建同步组件的基础工具。LockSupport API// 阻塞当前线程,调用unpark(Thread thread)方法或者当前线程被中断,才能从park返回void park()// 阻塞当前线程但时间不超过nanos纳秒voidparkN...原创 2019-01-29 20:34:05 · 349 阅读 · 0 评论