摘要: 1. CompletableFuture 简介 CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息。 CompletableFu 阅读全文
posted @ 2021-08-25 23:13 haojinglei 阅读(99) 评论(0) 推荐(0)
摘要: 1. Fork/Join框架简介 Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情: Fork:把一个复杂任务进行分拆,大事化小。 Join:把分拆任务的结果进行合并。 步骤介绍: 任务分割 阅读全文
posted @ 2021-08-25 23:11 haojinglei 阅读(78) 评论(0) 推荐(0)
摘要: 1. 线程池简介 线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。 例子:10 阅读全文
posted @ 2021-08-25 23:08 haojinglei 阅读(56) 评论(0) 推荐(0)
摘要: 1. BlockingQueue 简介 Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他 阅读全文
posted @ 2021-08-25 23:06 haojinglei 阅读(94) 评论(0) 推荐(0)
摘要: 1. 读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA 的 阅读全文
posted @ 2021-08-25 23:04 haojinglei 阅读(68) 评论(0) 推荐(0)
摘要: JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为: CountDownLatch: 减少计数 CyclicBarrier: 循环栅栏 Semaphore: 信号灯 1. 减少计数-CountDownLatch CountDownLa 阅读全文
posted @ 2021-08-25 23:03 haojinglei 阅读(60) 评论(0) 推荐(0)
摘要: 1. Callable接口 常规的两种创建线程的方法:一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是 Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能, Java 中提供了 Callable 接口。 阅读全文
posted @ 2021-08-25 23:01 haojinglei 阅读(67) 评论(0) 推荐(0)
摘要: 1. 线程不安全-ArrayList /** * ArrayList线程不安全案例 */ public class NotSafeDemo { /** * 多个线程同时对集合进行修改 */ public static void main(String[] args) { List list = ne 阅读全文
posted @ 2021-08-25 23:00 haojinglei 阅读(78) 评论(0) 推荐(0)
摘要: 线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。 1. 案例:加一减一 两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信。 1.1 synchronized 方案 /** * synchronized 关键字实现线程交替加减 */ pu 阅读全文
posted @ 2021-08-25 22:58 haojinglei 阅读(93) 评论(0) 推荐(0)
摘要: 1. Synchronized 1.1 Synchronized介绍 synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 修饰一个方法,被修 阅读全文
posted @ 2021-08-25 22:56 haojinglei 阅读(36) 评论(0) 推荐(0)
摘要: 1. JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是java.util.concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 2. 进程与线程 进程(Process)是计算机中的程序关于某数据集合上的一次运行 阅读全文
posted @ 2021-08-25 22:55 haojinglei 阅读(105) 评论(0) 推荐(0)