java多线程
老醋
这个作者很懒,什么都没留下…
展开
-
ExecutorCompletionService源码分析
之前有介绍过CompletionService用法的文章,这里直接拷过来,其实也是拷王宝令大佬的付费专栏里的介绍。简介CompletionService接口用于批量执行异步任务,批量执行异步任务时更加优雅且更实用。实现类是ExecutorCompletionService,提供了两个构造方法:要传入一个线程池,还可以传入一个阻塞队列保存任务执行结果的 Fut...原创 2019-09-15 17:38:47 · 180 阅读 · 0 评论 -
Java Exchanger类
Java Exchanger类用于两个线程之间互相交换数据。当两方执行不对称的操作使,例如当一个线程向缓冲区写入数据,另一个线程从缓冲区中读取数据。这些线程可以使用Exchanger来汇合,并将满的缓冲区与空的缓冲区交换。当两个线程通过Exchanger交换对象时,这种交换就把这两个对象安全的发布给另一方。(Java并发编程实战)为了方便理解,提供一个最简单的例子来展示他的基本用法。st...原创 2019-06-23 15:39:15 · 155 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
转载自:http://www.cnblogs.com/dolphin0520/p/3920373.html这篇文章写的很好,防止迷路找不到原文,转载来了volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字...转载 2019-06-23 09:41:19 · 160 阅读 · 0 评论 -
SynchronousQueue功能分析
之前没用过 Executors.newCachedThreadPool() 线程池,被问及干啥的,为啥这么干,不会然后就被鄙视了。转载一篇同步队列的用法。SynchronousQueue:同步Queue,属于线程安全的BlockingQueue的一种,此队列设计的理念类似于"单工模式",对于每个put/offer操作,必须等待一个take/poll操作,类似于我们的现实生...转载 2019-04-12 16:51:39 · 1070 阅读 · 0 评论 -
ThreadPoolExecutor使用注意事项
之前做过源码分析,链接如下:https://blog.csdn.net/u013759134/article/details/83659453可知,ThreadPoolExecutor线程池对新到任务的处理流程简述如下(为了简单起见,暂只考虑Running状态):1、查看当前工作线程数是否小于corePoolSize,如果是直接添加一个工作线程执行任务,不是转到22、添加任务到任务...原创 2019-04-12 11:34:13 · 673 阅读 · 0 评论 -
Semaphore源码分析
阅读本篇文章基础前提是对AQS有一定认识,如果看过前面的ReentranLock和CountDownLatch源码分析,看这篇文章就会轻松无比,且本文仅对最基本的acquire()方法和release()方法进行源码分析,其他版本获取、释放信号方法实现原理基本一致。概述Semaphore的概念类比操作系统的信号量,当然本身人家就叫semaphore。可以理解成Semaphore代表一组资源...原创 2019-04-02 09:30:12 · 231 阅读 · 0 评论 -
ConcurrentHashMap源码分析
概述本文基于jdk1.8来对CurrentHashMap来做源码分析。 ConcurrentHashMap在jdk1.8中的源码实现和HashMap非常相似。这个容器的实现完美的展示了如何不用锁的情况下实现同步(当然里面还是用到了锁的),看代码真的叹为观止,收益匪浅。 在1.7前ConcurrentHashMap采用分段加锁的技术来实现,说白了就是初...原创 2019-03-22 10:23:34 · 250 阅读 · 0 评论 -
CountDownLatch源码分析
简介 CountDownLatch常用于多个线程同步,经典用法的套路就是主线程起多个子线程,主线程初始化一个对应数字的CountDownLatch,子线程调用countDown()方法表示自己执行完毕,主线程阻塞到await()方法,等待所有子线程都调用countDown()方法完成。达到主线程等待多个子线程任务执行完毕的目的。 CountDownLatch类加...原创 2019-03-13 17:07:59 · 126 阅读 · 0 评论 -
ScheduledThreadPoolExecutor源码阅读
1概述 ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,同时还实现了ScheduledExecutorService接口,实现scheduleAtFixedRate、scheduleWithFixedDelay和schedule方法。我们平时使用ScheduledThreadPoolExecutor时最常用的方法就是scheduleA...原创 2019-02-20 16:37:58 · 491 阅读 · 0 评论 -
HashMap源码阅读
概述开头注释说明: 实现Map接口所有定义功能,与HashTable功能基本一样,除了HashTable是同步的,且HashMap可以保存<null, null>。 HashMap使用bucket数组做Hash表,如果Hash散列的够好,get()、put()方法就可以在常量时间返回,效率高。但是对于使用Iterator迭代访问,就会消耗“桶数(...原创 2019-03-09 18:50:31 · 135 阅读 · 0 评论 -
ReentranLock源码分析
简介ReentranLock实现了Lock接口,接口很简单,成员如下: ReentranLock内部主要是用AbstractQueuedSynchronizer来实现的,其中Sync就是实现AbstractQueuedSynchronizer抽象类,NofairSync和FairSync是 Sync的子类,分别对应非公平锁和公平锁的实现,实例化公平、非公平ReentranLock...原创 2019-03-09 18:21:50 · 226 阅读 · 1 评论 -
FutureTask源码分析
1 前言介绍:Future接口:FutureTask实现了两个java接口,Runnable和Future。从代码注释可以看到Future接口被设计来执行异步任务,提供了检查计算是否完成(isDone()方法)、等待计算完成以及检索计算结果的方法(get()方法)。任务结果定义在实例化Future时传入。 1. get()方法:可以从注释中看到接口设计get()方法的...原创 2019-02-18 15:17:55 · 287 阅读 · 0 评论 -
ThreadPoolExecutor源码阅读
1. 概览1.1 类架构 图1、类设计图 此图为Trust_FreeDom哥的图(https://www.cnblogs.com/trust-freedom/p/6681948.html),表达的...原创 2019-01-29 20:16:14 · 204 阅读 · 0 评论