![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC 大厂必备 高并发编程
文章平均质量分 77
JUC 大厂必备 高并发编程
真真最可爱
更新会很多的,适合新手刚入门的程序猿们看看。
展开
-
java——JUC高并发编程大合集,大厂必备
1 什么是 JUC1.1 JUC 简介在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。1.2 进程与线程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机原创 2021-11-02 08:33:02 · 412 阅读 · 0 评论 -
Java——JUC高并发编程,面试必问( CompletableFuture )
12 CompletableFuture12.1 CompletableFuture 简介CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息。CompletableFuture 实现了 Future, CompletionStage 接口,实现了 Future接口就可以兼容现在有线程池框架,而 CompletionStage 接口才原创 2021-11-01 12:48:55 · 791 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问( Fork/Join )
11 Fork/Join11.1 Fork/Join 框架简介Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情:Fork:把一个复杂任务进行分拆,大事化小Join:把分拆任务的结果进行合并任务分割:首先 Fork/Join 框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割。执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启动线程分别从原创 2021-10-31 11:06:01 · 633 阅读 · 0 评论 -
Java——JUC高并发编程,面试必问( ThreadPool 线程池)
10 ThreadPool 线程池10.1 线程池简介线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。例子: 10 年前单核 CPU 电脑,假的多线程,像马戏团小丑玩多个球,CPU 需要来回切换。 现在是多核电脑,多个线程各自跑在独立的 CPU 上,不用切换效率高。线程池的优势原创 2021-10-30 11:10:11 · 218 阅读 · 5 评论 -
Java——JUC高并发编程,面试必问( 阻塞队列 )
9 阻塞队列9.1 BlockingQueue 简介Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他们各自的功能以及常见使用场景。阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出 。有点类似我们的生产消费模型。当队列是空的,从队列中原创 2021-10-29 08:29:18 · 100 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问(读写锁)
8 读写锁8.1 读写锁介绍现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。针对这种场景,JAVA 的并发包提供了读写锁ReentrantReadWriteLock,它表示两个锁,一个是读操作相关的锁,称为共享锁;一个是写相关的锁,称为排他锁。线程进入读锁的前提条件:没有其他线程的写锁没有写原创 2021-10-28 14:36:18 · 117 阅读 · 0 评论 -
Java——JUC高并发编程,面试必问( JUC 三大辅助类 )
7 JUC 三大辅助类JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为:• CountDownLatch: 减少计数• CyclicBarrier: 循环栅栏• Semaphore: 信号灯7.1 减少计数 CountDownLatchCountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句。原创 2021-10-27 08:38:31 · 110 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问(Callable&Future 接口 )
6.1 Callable 接口目前我们学习了有两种创建线程的方法-一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口。现在我们学习的是创建线程的第三种方案—Callable 接口。Callable 接口的特点如下(重点):为了实现 Runnable,需要实现不返回任何内容的 run()方法,而对于Callab原创 2021-10-24 20:04:42 · 89 阅读 · 0 评论 -
Java——JUC高并发编程,面试必问(多线程锁 )
5 多线程锁5.1 锁的八个问题演示class Phone { public static synchronized void sendSMS() throws Exception { //停留 4 秒 TimeUnit.SECONDS.sleep(4); System.out.println("------sendSMS"); } public synchronized void sendEmail() throws Exception原创 2021-10-23 11:40:21 · 75 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问( 集合的线程安全)
4 集合的线程安全4.1 集合操作 Demo(演示)NotSafeDemo:import java.util.ArrayList;import java.util.List;import java.util.UUID;/*** 集合线程安全案例*/public class NotSafeDemo {/*** 多个线程同时对集合进行修改*/ public static void main(String[] args) { List list = new Arra原创 2021-10-21 14:56:18 · 134 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问( 线程间通信 )
3.线程间通信线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析:面试题场景—两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信。3.1 synchronized 方案/*** volatile 关键字实现线程交替加减*/public class TestVolatile { /** * 交替加减 */ public static void main(String[] args){原创 2021-10-20 10:10:40 · 112 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问( Lock接口)
2 Lock 接口2.1 Synchronized2.1.1 Synchronized 关键字回顾synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;虽然可以使用 synchronized 来定义方法,但synchronized 并不属于方法原创 2021-10-19 09:06:00 · 83 阅读 · 1 评论 -
Java——JUC高并发编程,面试必问( 什么是 JUC)
1 什么是 JUC1.1 JUC 简介在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。1.2 进程与线程进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机原创 2021-10-18 09:47:06 · 134 阅读 · 1 评论