当前位置: 首页 > news >正文

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+学习笔记】**即可免费获取。

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

http://www.lryc.cn/news/318552.html

相关文章:

  • C语言——详解字符函数和字符串函数(一)
  • 三款内衣洗衣机的顶级较量:希亦、小吉、由利,谁才是性价比之王?
  • Java枚举多值映射应用
  • css--浮动
  • 基于有限状态机开发健壮的Nodejs/TCP客户端
  • javaEE13(网站第8章两个课后题)
  • 【Leetcode每日一题】 递归 - 反转链表(难度⭐)(35)
  • Unity基础学习
  • Java并发编程学习笔记:AQS
  • Github上哪些好用的工具
  • 如何确保面试流程标准化操作,避免人为因素影响**
  • YOLOv7改进 | 更换主干网络之PP-LCNet
  • MySQL基础-----多表查询之子查询
  • nginx应用场景(附配置)
  • tvm android_rpc_test.py执行报错解决
  • 十、项目沟通管理
  • SQL设计时增加说明列
  • 前端提高性能——使用Intersection Observer API对图片视频进行懒加载
  • 杂七杂八111
  • 微信小程序(一)
  • 【DL经典回顾】激活函数大汇总(十二)(GLU ReGLU附代码和详细公式)
  • 【C++】string类初步介绍
  • HCIP --- BGP 综合实验
  • 【优选算法】专题1 -- 双指针 -- 移动零
  • 【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换
  • 蓝桥杯---棋盘(典型的二维差分问题)
  • OpenHarmony教程指南—ArkTS时钟
  • uniapp遇到的问题
  • oppo前端开发一面
  • 案例分析篇09:Web架构设计相关20个考点(7~11)(2024年软考高级系统架构设计师冲刺知识点总结)