Java并发包详解
基于JDK8,结合实例,详细解析并发包中核心类库的实现原理及使用方法。
微联实验室
10年后端开发工程师,现物联网爱好者
展开
-
[Java并发包学习八]深度剖析ConcurrentHashMap
还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到: HashMap是非线程安全的,HashTable是线程安全的。 那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。今天我们将深入剖析一个比HashTable性能更优的线程安全的Ma原创 2017-05-11 13:52:20 · 1070 阅读 · 0 评论 -
[Java并发包学习七]解密ThreadLocal
相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知!看看JDK中的源码是怎么写的: This class provides thread-local va原创 2017-05-11 13:51:31 · 4476 阅读 · 14 评论 -
[Java并发包学习六]Semaphore介绍
Semaphore字面意思是信号量。他主要用于控制有限的资源的访问数量。我们看一个生活中常常出现的场景: 一个厕所只有3个坑位,但是有10个人来上厕所,那怎么办?假设10的人的编号分别为1-10,并且1号先到厕所,10号最后到厕所。那么1-3号来的时候必然有可用坑位,顺利如厕,4号来的时候需要看看前面3人是否有人出来了,如果有人出来,进去,否则等待。同样的道理,4-10号也需要等待正在上厕所的人原创 2017-05-11 13:50:20 · 1022 阅读 · 3 评论 -
[Java并发包学习五]CountDownLatch和CyclicBarrier介绍
JDK中提供了一些用于线程之间协同等待的工具类,CountDownLatch和CyclicBarrier就是最典型的两个线程同步辅助类。下面分别详细介绍这两个类,以及他们之间的异同点。CountDownLatch类CountDownLatch顾名思义:倒计数锁存器。没错,他就是一个计数器,并且是倒着计数的。他的应用场景如下: 一个任务A,他需要等待其他的一些任务都执行完毕之后它才能执行。就比如说原创 2017-05-11 13:48:46 · 1226 阅读 · 0 评论 -
[Java并发包学习四]Future和FutureTask
Future主要用来表示线程异步执行的结果,他提供了检查异步执行的程序是否已经执行完毕、是否已经被取消,并且获取执行结果的方法。它是一个接口,接口的定义如下:public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isD原创 2017-05-11 13:46:51 · 878 阅读 · 0 评论 -
[Java并发包学习三]ThreadFactory介绍
ThreadFactory翻译过来是线程工厂,顾名思义,就是用来创建线程的,它用到了工厂模式的思想。它通常和线程池一起使用,主要用来控制创建新线程时的一些行为,比如设置线程的优先级,名字等等。它是一个接口,接口中只有一个方法: /** * Constructs a new {@code Thread}. Implementations may also initialize原创 2017-05-11 13:45:43 · 1553 阅读 · 0 评论 -
[Java并发包学习二]Executors介绍
Executors类是JDK 1.5开始自带的一个非常强大的主要用于创建各类线程池的工具类。常用方法介绍newFixedThreadPoolnewFixedThreadPool方法有两种函数签名: public static ExecutorService newFixedThreadPool(int nThreads) public static ExecutorService newFix原创 2017-05-11 13:00:35 · 1873 阅读 · 0 评论 -
[Java并发包学习一] Executor/ExecutorService
本文介绍jdk8中与Executor相关的一些接口或类。Executor接口该类提供一个提交任务的方法,提交的任务可以在提交程序本线程运行,也可以在不同的线程运行,也可以在一个线程池中的线程运行,全看如何使用。 However, the {@code Executor} interface does not strictly require that execution be async原创 2015-07-30 12:06:15 · 2405 阅读 · 0 评论