其他分享
首页 > 其他分享> > Android开发经典实战!渣本逆袭大厂面经分享

Android开发经典实战!渣本逆袭大厂面经分享

作者:互联网

在很多的博客或者书上,说有三种,除了上述的两种以外,还有一种是实现Callable接口。但是这种并不是,因为,我们检查JDK中Thread的源码,看它的注释: There are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread. This subclass should override the run method of class Thread. An instance of the subclass can then be allocated and started. 这里面明确指出,只有两种方式创建一个新线程执行,而且Thread类的构造方法里,也没有接受参数类型为Callable的方法。所以新启线程的方式只有上述两种。 ## Thread和Runnable的区别 我们知道Java是面向对象的语言,对于线程来说,这是操作系统层面的概念,那么对于线程来说,Thread和Runnable谁才是线程呢? 要注意,Thread才是Java里对线程的唯一抽象,Runnable只是对任务(业务逻辑)的抽象。Thread可以接受任意一个Runnable的实例并执行。用一个生活中的例子来说明,一个开发部门中有很多的开发人员,每个开发人员都可以开发程序,这样,每个开发人员就是一个个的Thread,而开发人员接收到的开发任务就是一个个的Runnable,开发人员是做实际开发工作的,不同的开发人员完全可以接受同一个开发任务。 ## 深入理解run()和start() 同时,我们通过new Thread()其实只是new出一个Thread的实例,还没有操作系统中真正的线程挂起钩来。只有执行了start()方法后,才实现了真正意义上的启动线程。 start()方法让一个线程进入就绪队列等待分配CPU,分到CPU后才调用实现的run()方法,start()方法不能重复调用,如果重复调用会抛出IllegalThreadStateException异常。 而run方法是业务逻辑实现的地方,本质上和任意一个类的任意一个成员方法并没有任何区别,可以重复执行,也可以被单独调用。 ## 线程的状态 Java中线程的状态也不是简单的只有运行和死亡,共分为6种: 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 3. 阻塞(BLOCKED):表示线程阻塞于锁。 4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。 5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。 6. 终止(TERMINATED):表示该线程已经执行完毕。 理解了线程的状态才能更好的让我们在并发编程调试程序时,知道线程的工作情况,进而有针对性的检查我们的代码的运行情况,进一步优化我们的代码。 ## 最后 答应大伙的备战金三银四,大厂面试真题来啦! 这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。 节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 给文章留个小赞,就可以免费领取啦~ **戳我领取:[3000页Android开发者架构师核心知识笔记](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)** **《960全网最全Android开发笔记》** ![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626014260818538.jpg) <meta charset="utf-8"/> **《379页Android开发面试宝典》** 包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。 如何使用它? 1.可以通过目录索引直接翻看需要的知识点,查漏补缺。 2.五角星数表示面试问到的频率,代表重要推荐指数 ![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626014260524762.jpg) **《507页Android开发相关源码解析》** 只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。 真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626014260472641.jpg) **腾讯、字节跳动、阿里、百度等BAT大厂 2020-2021面试真题解析** ![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626014261931804.jpg) >资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

标签:Thread,开发人员,本逆袭,面经,start,源码,线程,Android
来源: https://blog.51cto.com/u_15297690/3036731