目录
[面试题3.37 线程、进程的基本概念? 程序、进程、线程之间的关系?](#面试题3.37 线程、进程的基本概念? 程序、进程、线程之间的关系?)
[面试题3.38 什么是多线程](#面试题3.38 什么是多线程)
[面试题3.39 启动线程的方式?start or run?](#面试题3.39 启动线程的方式?start or run?)
[面试题3.40 线程的生命周期? 线程运行状态?](#面试题3.40 线程的生命周期? 线程运行状态?)
[面试题3.41 线程的调度策略](#面试题3.41 线程的调度策略)
[面试题3.42 Java 中用到的线程调度算法是什么?](#面试题3.42 Java 中用到的线程调度算法是什么?)
[面试题3.43 在 java 中守护线程和用户线程区别?](#面试题3.43 在 java 中守护线程和用户线程区别?)
面试题3.37 线程、进程的基本概念? 程序、进程、线程之间的关系?
【技术难度: 1 出现频率:2 】
线程是程序执行的最小单元,是一个执行流程,一个执行路径。
进程是程序一次动态执行的过程,执行完毕的一个完整过程;
进程是线程和程序需要的资源的集合。线程是进程的一个子任务。
面试题3.38 什么是多线程
【技术难度: 1 出现频率:2 】
如果程序只有一条执行路径,该程序就是单线程程序;如果程序有多条执行路径,该程序就是多线程程序。
什么是线程安全?
在单线程情况下运行和在多线程情况下运行的结果相同。
面试题3.39 启动线程的方式?start or run?
【技术难度: 1 出现频率:2 】
调用Thread类对象的start()方法才是启动线程,run()方法是线程将要做的事,调用线程的run()只是在当前线程运行,不会启动另一个线程。
面试题3.40 线程的生命周期? 线程运行状态?
【技术难度: 2 出现频率: 2 】
第一层:
线程的生命周期分为5个状态:新建,就绪,运行,阻塞,死亡。
第二层:
1.创建状态是指刚new出来的线程对象;
2.就绪状态是指调用start()方法;
3.运行状态是指获得了CPU时间片;
4.等待/阻塞状态,比如调用sleep()、join()、wait()方法以及IO操作;
5.死亡状态是指run()方法结束。
扩展(无需背诵):
面试题3.41 线程的调度策略
【技术难度: 2 出现频率: 2 】
线程调度器选择优先级最高的线程运行,不过如果发生以下情况,就会终止线程的运行:
1.线程体中调用了yield()方法让出了对CPU的占用权利;
2.线程体中调用了sleep()方法使线程进入睡眠状态;
3.线程由于IO操作受到阻塞;
4.另外一个更高优先级线程出现;
5.在支持时间片的系统中,该线程的时间片用完。
面试题3.42 Java 中用到的线程调度算法是什么?
【技术难度:2 出现频率:1 】
采用时间片轮转的方式。可以设置线程的优先级,会映射到下层系统的优先级上,如非特别需要,尽量不要用,防止线程饥饿(得不到cpu执行权)。
面试题3.43 在 java 中守护线程和用户线程区别?
【技术难度: 1 出现频率:1 】
第一层:
java中的线程分为守护线程和用户线程。守护线程主要是在后台运行为用户线程提供服务,若所有用户线程结束后只剩下守护线程,JVM自动停止。
第二层:
创建守护线程可以通过Thread类的实例方法setDaemon(true)设置为守护线程,否则默认为用户线程。setDaemon()方法必须在start()启动线程前调用,否则抛异常。
扩展(无需背诵):
Daemon - 守护神
User - 用户
------------------------END-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。