20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇)

本文主要是介绍20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接着第1, 2篇后,我们继续来跟进一下并发编程的其它内容,如下:

第9节 java.util.concurrent包

线程池

线程池的核心接口是ExecutorServicejava.util.concurrent还提供了一个静态工厂类Executors,其中包含用于创建配置线程池的工厂方法。

其实 静态工厂方法如下

工厂方法描述
newSingleThreadExecutor只返回ExecutorService一个线程。
newFixedThreadPool返回ExecutorService对象,该对象且持有固定数量的线程。
newCachedThreadPool返回ExecutorService对象,该对象持有不同大小的线程池。
newSingleThreadScheduledExecutor返回ScheduledExecutorService对象,只返回1个线程 。
newScheduledThreadPool返回一个ScheduledExecutorService核心线程集。
newWorkStealingPool返回ExecutorService`对象,拥有多个任务队列(以便减少连接数)的线程池。

注意:

调整线程池大小时,大小是根据你的计算机中的逻辑核心数而定的。这个大小可以通过调用Runtime.getRuntime().availableProcessors()方法获得该值。

线程池实现描述
ThreadPoolExecutor线程池大小可调整,ThreadPoolExecutor实现了ExecutorService接口,使用池里的线程来执行你提交的任务,通常使用 Executors 工厂方法来配置。
ScheduledThreadPoolExecutorThreadPoolExecutor的扩展,并提供了执行定期任务的功能。
ForkJoinPoolForkJoinPool实现了ExecutorService接口,ForkJoinPool 采用分治思想将大任务分割成几个小任务,小任务继续分割成更小的任务,直至任务不可分割,然后运行这些任务。

任务随着ExecutorService#submitExecutorService#invokeAll或者提交,ExecutorService#invokeAny对于不同类型的任务具有多个重载。

其实 功能接口如下

接口描述
Runnablerun()方法没有返回值。
Callablecall方法有返回值。

Future

Future是对于具体的Runnable任务或Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

ExecutorService使用Future作为返回类型。

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future future = executorService.submit(() -> “结果”);
try {
String result = future.get(1L, TimeUnit.SECONDS);
System.out.println(“结果为 '” + result + “'.”);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e.getCause());
} catch (TimeoutException e) {
throw new RuntimeException(e);
}
assert future.isDone();

ReentrantLock锁

java.util.concurrent.locks软件包括了经常使用到的Lock接口。ReentrantLock类其实也实现了synchronized关键字的功能,还提供了其它功能,例如获取有关锁的状态,非阻塞tryLock()和可中断锁的信息。使用显式ReentrantLock的示例如下:

class JamesCounter {
private final Lock lock = new ReentrantLock();
private int value;

int increment() {
lock.lock();
try {
return ++value;
} finally {
lock.unlock();
}
}
}

ReadWriteLock读写锁

java.util.concurrent.locks还包含一个ReadWriteLock接口(ReentrantReadWriteLock实现),读写锁,通常允许多个并发读取,但只允许一个写入。

class JamesStatistic {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private int value;

void increment() {
lock.writeLock().lock();
try {
value++;
} finally {
lock.writeLock().unlock();
}
}

int current() {
lock.readLock().lock();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

以上【历年大厂高级工程师面试题集】、【Android高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。

d高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

这篇关于20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812675

相关文章

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议