在多线程编程中,锁是保证线程安全的核心机制之一。Java除了提供 synchronized 关键字外,还通过 java.util.concurrent.locks 包提供了更灵活的锁实现。ReentrantLock 是Java并发包中一个重要的锁实现,它提供了比 synchronized 更灵活的锁操作。接下来我们深入了解下Java中的可重入锁。
在开始以前,先思考下什么是线程创建有哪几种方式,为了避免频繁创建和销毁线程造成不必要的性能,一般在使用线程时,会采用线程池,那什么是线程池呢?
上文聊到 CompletableFuture 内置了 ForkJoinPool 线程池,我们推荐使用自定义线程池,那这两种有什么区别呢?接下来我将对 ForkJoinPool 架构揭秘包括工作窃取算法、核心组件和任务提交与执行过程,了解以下这个专为可分解任务设计的线程池。
Java 创建线程的方式,一般常用的是 Thread、Runnable,如果需要当前处理的任务有返回结果的话,
需要使用 Callable,Callable 运行需要配合 Future,那 Future 是个什么鬼?FutureTask 又是个什么鬼?你是否深入了解过源码的处理?接下来我们将分析 Future 接口和 FutureTask 类的关系,然后深入分析 FutureTask 的源码实现。
平时多线程开发一般就是使用 Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor 这些内容,之前聊到 FutureTask 是同步非阻塞,将这些内容组合在一起去解决一些并发编程的问题时,很多时候不能去完成多线程的编排,这个时候就需要异步非阻塞的 CompletableFuture 来处理这些任务之间的逻辑关系了。