本文主要是介绍20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接着第1, 2篇后,我们继续来跟进一下并发编程的其它内容,如下:
第9节 java.util.concurrent包
线程池
线程池的核心接口是ExecutorService
。java.util.concurrent
还提供了一个静态工厂类Executors
,其中包含用于创建配置线程池的工厂方法。
其实 静态工厂方法如下
工厂方法 | 描述 |
---|---|
newSingleThreadExecutor | 只返回ExecutorService 一个线程。 |
newFixedThreadPool | 返回ExecutorService 对象,该对象且持有固定数量的线程。 |
newCachedThreadPool | 返回ExecutorService 对象,该对象持有不同大小的线程池。 |
newSingleThreadScheduledExecutor | 返回ScheduledExecutorService 对象,只返回1个线程 。 |
newScheduledThreadPool | 返回一个ScheduledExecutorService 核心线程集。 |
newWorkStealingPool | 返回ExecutorService`对象,拥有多个任务队列(以便减少连接数)的线程池。 |
注意:
调整线程池大小时,大小是根据你的计算机中的逻辑核心数而定的。这个大小可以通过调用
Runtime.getRuntime().availableProcessors()
方法获得该值。
线程池实现 | 描述 |
---|---|
ThreadPoolExecutor | 线程池大小可调整,ThreadPoolExecutor实现了ExecutorService接口,使用池里的线程来执行你提交的任务,通常使用 Executors 工厂方法来配置。 |
ScheduledThreadPoolExecutor | ThreadPoolExecutor 的扩展,并提供了执行定期任务的功能。 |
ForkJoinPool | ForkJoinPool实现了ExecutorService接口,ForkJoinPool 采用分治思想将大任务分割成几个小任务,小任务继续分割成更小的任务,直至任务不可分割,然后运行这些任务。 |
任务随着ExecutorService#submit
,ExecutorService#invokeAll
或者提交,ExecutorService#invokeAny
对于不同类型的任务具有多个重载。
其实 功能接口如下
接口 | 描述 |
---|---|
Runnable | run()方法没有返回值。 |
Callable | call方法有返回值。 |
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移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节
以上【历年大厂高级工程师面试题集】、【Android高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。
d高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。
整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。
这篇关于20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!