JDK源码学习
文章平均质量分 63
RojerAlone
脚踏实地,笨鸟先飞。
展开
-
CyclicBarrier
CyclicBarrier字面意思“循环屏障”,翻译为“可重用的屏障”更贴切一点。这个工具类的作用是起到一个栅栏的作用,当指定数量的线程都执行到某一个步骤之后,再一起往下执行,相当于一个阀门,容量满了再开阀门。看一下这个类的结构:这个类没有继承 AbstractQueuedSynchronizer,内部类也没有继承,而是使用了 ReentrantLock lock 这样一个变量来控制线程同步,内部类原创 2017-09-02 10:35:54 · 421 阅读 · 0 评论 -
Semaphore
SemaphoreSemaphore 是 Java 并发包中提供的一个工具类,翻译过来为“信号量”,作用是控制并发线程的数量。类的结构先来看一下 Semaphore 的结构: Semaphore 中有三个个内部类:类 Sync 继承了 AbstractQueuedSynchronizer,重写了 tryReleaseShared 方法,还有一些在 Semaphore 中用到的辅助方法,都是对线程原创 2017-09-02 11:49:03 · 442 阅读 · 0 评论 -
AbstractQueuedSynchronizer 之 互斥锁
AbstractQueuedSynchronizer 之 互斥锁acquire源码如下:/** * Acquires in exclusive mode, ignoring interrupts. Implemented * by invoking at least once {@link #tryAcquire}, * returning on success. Otherwise th原创 2017-08-23 15:36:28 · 289 阅读 · 0 评论 -
AbstractQueuedSynchronizer 之 共享锁
AbstractQueuedSynchronizer 之 共享锁acquireShared/** * Acquires in shared mode, ignoring interrupts. Implemented by * first invoking at least once {@link #tryAcquireShared}, * returning on success. Ot原创 2017-08-23 15:38:59 · 390 阅读 · 0 评论 -
ThreadPool 之 线程池概览
ThreadPool[注] 本文中的源码基于 JDK1.8,源码中的注释为 JDK 中注释的翻译加上个人的理解。如有错误欢迎指正。引言 因为进程的切换相当耗费资源,加上 CPU 的发展,操作系统中引入了线程的概念。相比于进程的上下文切换,线程的切换更轻量级,但是不代表没有开销,而且大部分多线程的生命周期都比较短,会发生频繁的线程创建、销毁动作,这也是相当消耗资源的,因此引入了线程池。 合理利用线原创 2017-07-30 00:10:15 · 516 阅读 · 0 评论 -
ThreadPool 之 线程池实现类 ThreadPoolExecutor
ThreadPool 之线程池实现类 ThreadPoolExecutor 接上篇文章 ThreadPool 之 线程池概览。ThreadPoolExecutor 线程池 ThreadPoolExecutor 继承了 AbstractExecutorService,实现了核心方法 execute 以及一些获取线程池信息的方法。 ThreadPoolExecutor 有一些重要的参数:// ct原创 2017-08-01 11:08:13 · 927 阅读 · 0 评论 -
ThreadPool 之 Callable、Future 和 FutureTask
ThreadPool 之 Callable、Future 和 FutureTaskCallable、Future 和 FutureTask 一般情况下,线程有两种创建方式,一种是继承 Thread 类,一种是实现 Runnable 接口。在线程运行执行的都是 run 方法,这是一个 void 方法,没有返回值。如果要获取线程执行的结果,就必须传入一个变量,在执行完之前将结果写入这个变量中。 从原创 2017-08-03 20:47:20 · 607 阅读 · 0 评论 -
ThreadPool 之 线程池工具类 Executors
接上篇 ThreadPool 之 Callable、Future 和 FutureTask。用 Executors 创建线程池 JDK 中提供了一个 Executors 类,在这个类中构造好了几个通用的线程池,并且 JDK 文档中也强烈推荐(urged to use)使用 Executors 来构建线程池。Executors/** * 创建容量为 nThreads 的线程池,最大工作线程也为 n原创 2017-08-03 20:51:50 · 1079 阅读 · 0 评论 -
深入JDK源码之Hashtable
数据结构数组实现的Hash表 /** * The hash table data. */ private transient Entry<?,?>[] table; // HashMap中的table使用默认修饰符,即同一包内可见Entry<?,?> /** * Hashtable bucket collision list entry *原创 2017-03-04 20:12:03 · 524 阅读 · 0 评论 -
深入JDK源码之HashMap
感言 昨天参加了支付宝的电话一面,备受打击,更多的是让自己明白了自己的缺陷在哪,以及了解了互联网公司面试是怎样问问题的。 从结果来看,肯定是挂了,因为只谈了46分钟。从自我来看,收获满满,4个字评价我自己,就是“一知半解”。很多名词都知道,也都看过一点相关的文章,但是让我自己说,我只能说一个大概,上次看了HashMap的源码之后,又看了其他一些集合类,但是没有总结和深入,比如:为什么Hash原创 2017-03-03 18:27:27 · 396 阅读 · 0 评论 -
CountDownLatch
CountDownLatchCountDownLatch 直译过来为“倒数阀门”,顾名思义,它是起到一个阀门的作用,实际上是用来控制线程的执行过程。来看一下这个类提供了哪些方法: 从图中可以看出,CountDownLatch 的构造方法是传入一个整数,然后提供了 await()、countDown()、getCount() 等方法,还有一个内部类 Sync,这个内部类继承了 AbstractQue原创 2017-09-02 10:34:29 · 442 阅读 · 0 评论