- 如果调用notifyAll()方法就唤醒全部的线程。注意:调用notify()方法后并不会立即释放object锁,会等待该线程执行完毕后释放Object锁。
4.线程池中的几个参数是什么意思,线程池的种类有哪些?
线程池的构造函数如下:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);}
参数解释如下:
· corePoolSize:核心线程数量,不会释放。
· maximumPoolSize:允许使用的最大线程池数量,非核心线程数量,闲置时会释放。
· keepAliveTime:闲置线程允许的最大闲置时间。
· unit:闲置时间的单位。
· workQueue:阻塞队列,不同的阻塞队列有不同的特性。
线程池分为四个类型:
· CachedThreadPool:闲置线程超时会释放,没有闲置线程的情况下,每次都会创建新的线程。
· FixedThreadPool:线程池只能存放指定数量的线程池,线程不会释放,可重复利用。
· SingleThreadExecutor:单线程的线程池。
· ScheduledThreadPool:可定时和重复执行的线程池。
5.Handler、Thread和HandlerThread的差别?
-
Handler:在android中负责发送和处理消息,通过它可以实现其他支线线程与主线程之间的消息通讯。
-
Thread:Java进程中执行运算的最小单位,亦即执行处理机调度的基本单位。某一进程中一路单独运行的程序。
-
HandlerThread:一个继承自Thread的类HandlerThread,Android中没有对Java中的Thread进行任何封装,而是提供了一个继承自Thread的类HandlerThread类,这个类对Java的Thread做了很多便利的封装。HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,它在内部直接实现了Looper的实现,这是Handler消息机制必不可少的。有了自己的looper,可以让我们在自己的线程中分发和处理消息。如果不用HandlerThread的话,需要手动去调用Looper.prepare()和Looper.loop()这些方法。
总结
线程相关的知识很重要,这也是面试常问的原因。
最后在这里我也分享一份大佬自己收录整理的**Android学习PDF+架构视频+面试文档+源码笔记**,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
最近面试被怼了?缺面试题刷提升自己吗?
点击:
来获取学习资料提升自己去挑战一下BAT面试难关吧
你有遇到过什么刁钻的面试题吗,欢迎留言分享~