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):表示该线程已经执行完毕。 理解了线程的状态才能更好的让我们在并发编程调试程序时,知道线程的工作情况,进而有针对性的检查我们的代码的运行情况,进一步优化我们的代码。 **如果你进阶的路上缺乏方向,可以[点击我的【Github】](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)加入我们的圈子和安卓开发者们一起学习交流!** 以下全部内容都可以在GitHub中获取! - Android进阶学习全套手册 ![img](http://www.icode9.com/i/li/?n=2&i=images/20210708/1625676569129041.jpg) - Android对标阿里P7学习视频 ![img](http://www.icode9.com/i/li/?n=2&i=images/20210708/1625676570275964.jpg) - BATJ大厂Android高频面试题 ![img](http://www.icode9.com/i/li/?n=2&i=images/20210708/1625676570868840.jpg) 最后,借用我最喜欢的乔布斯语录,作为本文的结尾: > 人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。 > 你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。 > 最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。
上一篇:终于有大牛把Java线程知识点讲清楚了!(建议收藏)


下一篇:Java实现多线程的两种方式