2016 - 2024

感恩一路有你

android handler怎么切换线程 面试:Handler的工作原理是怎样的?

浏览量:2565 时间:2023-07-14 10:30:47 作者:采采

面试:Handler的工作原理是怎样的?

Handler机制工作原理:

Handler工作流程基本上除开Handler、Looper、Message、MessageQueue四个部分。但我们在护理开发中,偶尔会都只会要用Handler和Message两个类。Message负责消息的均搭载了,里面有个target作用于标志消息,string主要是用于存放内容,Handler你们负责消息的分发和处理。

下面具体给你回答下:

Handler机制是由Looper和MessageQueue来构建消息机制的。

MessageQueue:消息队列。只不过名为队列,然而事实并非如此它的内部存储结构并不是什么唯一的队列,而是区分单链表的数据结构来存储消息列表的,其中主要注意有再插入enqueue()和之中飞出带走并彻底删除next()两个方法。

Looper:消息非循环。MessageQueue来存储消息,Looper则是以循环吧的去中搜索如何确定有新消息,如有就去如何处理,若没有就standby(静静的等待)。一个线程创建战队Handler时简单要创建Looper的,否则运行错误:RuntimeException:oh,noLooper()wasntapparentlyontothisthread,而且每个线程下只要创建战队一个Looper,否则会报错:RuntimeException:Only oneLoopermay becreatedperthread。

面试中解释,见意能自己学习总结一套自己的专属答案,并再理解透,那样当碰到这个问题,就能能回答的游刃有余!

如何优雅的使用和理解线程池?你怎么看?

要把java线程池表述好因此用好,必须把并发编程的基础知识掌握到好,另外把线程池的所有API的官方文档仔细阅读理解研究什么一遍。这里把优雅的使用线程池的要点总结不胜感激:

1.弄明白你要用线程池干什么。比如你的目的是把歌词同步API改造为异步,应该打算并发帮忙多个外部服务,肯定减少线程的创建战队和销毁以处理用户请求等。

2.依据你的不好算项目需求,配置好线程池的参数,具体看以及corePoolSize,maximumPoolSize,阻塞住队列,keepAliveTime,线程工厂和饱和现象策略(也可以说是RejectedExecutionHandler)。

3.据你的应用特点部署线程池。有的后台服务运用适合我在起动的时候最少修改好线程池,在应用的执行过程不再继续如何修改线程池。有的时候,应用比较适合原先创建一个线程池而且把任务递交出来,使用以后之后立刻强制销毁。

4.当你确定并没有在用线程池之后,肯定全局函数shutdown()以优雅的关闭线程池。shutdown也可以可以保证之前早就再提交到线程池中的任务不可能被丢弃,保证了数据安全。

5.当内部函数了shutdown之后,线程池此时巳经很可能在执行任务,只不过是关了了重新提交任务的入口。如果没有不需要耐心的等待线程池完全重新开启,不需要调用awaitTerminate以等待线程池把队列中的任务完全处理结束并且清理过完成,接着才赶往。awaitTerminate顺利直接返回了,线程池不算是真的清理干净了。

总结归纳一下,线程池通过创建(构造方法)、递交任务(execute)、定期清理(shutdown),耐心的等待定时清理都结束了(awaitTerminate)的顺序动态链接库API,这样的不使用线程池才算优雅。要想用好java线程池,价值最大化优化程序的性能可以不做个参考我公众号里的分析文章。

线程 线 程池 消息 Looper

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。