BlockingQueue浅析

1. Queue分类

1.1 BlockingQueue

BlockingQueue是并发包里阻塞队列的一个接口。主要有(针对JDK1.8版本)如下几种(下面的ConcurrentLinkedQueue和LinkedTransferQueue不是阻塞队列哦。):

队列

有界性

数据结构

ArrayBlockingQueue

bounded

加锁

array list

LinkedBlockingQueue

optionally-bounded

加锁

linked list

PriorityBlockingQueue

unbounded

加锁

heap

......

聊聊JAVA的线程池

1. 介绍

并发包提供了几种不同类型的线程池。今天我们来更加仔细地看看其实现原理。下面的分析适用于JDK1.7

2. 类分析

类的结构如下:

2.1 池分类

通过ThreadPoolExecutor创建的池: 例如Fixed pool 、Cached pool和singleThread等线程池。在1.8中还引入了WorkStealingPool这个基于ForkJoinPool里面窃取工作算......

再来理解下ThreadLocal类

1. 什么是ThreadLocal类

JDK官方文档对其定义如下:

This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically ......

从Runnable到Callable谈到ExecutorServer的submit方法和execute方法

1. 介绍Runnable和Callable

创建线程类一般使用的方式有三种:

继承Thread调用start方法

实现Runnable接口调用run方法

实现Callable接口调用call方法

如今,第一种方式肯定是差不多淘汰了。因为用继承约束很大。

关于使用Runnable和Callable接口的异同在StackoverFlow的一篇帖子The difference between the Runnable and Callable interfaces in Java中说的比较清楚。

主要区别就是:

Runnable能做得,Callabl......

java中的future和completableFuture区别

1. 介绍

java自带的实现任务异步执行的API主要就是future和completableFuture。这里简单介绍下。

2. future

future是JAVA5就引入的。主要是创建一个线程池,然后提交Runnable或者Callable的任务。然后可以用get来获取返回结果(执行完毕才会返回)

优点:一定程度上让一个线程池内的任务异步执行了

缺点:回调无法放到与任务不同的线程中执行。传统回调最大的问题就是不能将控制流分离到不同的事件处理器中。例如主线程等待各个异步执行的线程返回的结果来做下一步操作,则必须阻塞在future.get()的地方等待结果返回。这时候......