面试-J.U.C包的梳理

1.J.U.C包的梳理

Java.Util.Concurrent包简称JUC

(1)JUC整体架构图

(2)分析

Executor:线程执行器,任务执行和调度的框架。Tools下存在executor相关的executors类,用于创建executorservice,scheduleexecutorservice,threadfactory和callable对象。

在java5以前,协调共享对象的访问时,可以使用的机制只有volatile和synchronized关键字。再之后就出现了juc.locks;locks里引入了显示锁,方便对线程中的共享资源进行更细粒度的锁控制;condition对象有lock创建(可以创建多个),主要用于线程的等待和唤醒,wait,notify,notifyall进行对象化;lock和condition都是基于AQS实现的,AQS的底层是调用locksupport.park和locksupport.unpark方法去实现线程的阻塞和唤醒的;ReentrantReadWriteLock指的是没有线程进行写操作时,可以多个线程进行读操作,当有线程进行写操作时,其他线程只能等待,类似于mysql的读锁跟写锁的机制;在读多于写的情况下,比reentrantlock(排它锁)提供更好的吞吐量。

Atomic:一个操作是不可中断的,理解:相关原子类就是具有原子操作特征的类。方便程序员在多线程环境下,无锁的进行原子操作;使用的是CAS的更新方式,当某个线程在执行atomic方法时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等待该方法完成后,在等待JVM从等待队列中选择一个线程来执行;在软件层面是非阻塞的,硬件层面是借助处理器的原子指令来保证的;在面对多线程的累加操作时,可以适当使用atomic来解决

(3)并发工具类

四个同步器主要作用是:协助线程的同步。



Semaphore(信号量):控制某个资源可被同时访问的线程的个数。

acquire去获取许可,没有则等待。Release释放许可。


(4)BlockingQueue

提供了可阻塞的入队出队操作,如果队列满了,入队操作将阻塞,直到有空间可用,如果队列空了,出队操作将阻塞,直到有元素可用。

相关推荐
.道阻且长.6 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王7 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
kyriewen9 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
ZJH__GO10 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆10 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光10 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林10 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu11 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
大龄秃头程序员12 小时前
深入梳理 UIView touch 事件全链路原理与实战
面试
AI人工智能+电脑小能手12 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦