多线程面试题--线程基础

目录

线程与进程的关系

什么是进程

 什么是线程

区别

并行和并发的区别

单核情况

多核情况

 区别

线程创建的方式

继承Thread类

实现Runnable接口 

 实现Callable接口

线程池

 runnable 和 callable 有什么区别?

 什么时候抛出异常,处理异常?

线程的 run()和 start()有什么区别?

线程包括哪些状态,状态之间如何变化的?

 变化图解​编辑

总结

 如何保证不同线程执行顺序

notify()和 notifyAll()有什么区别?

wait和sleep方法的不同?

如何停止一个正在运行的线程?


多线程面试题--线程基础_第1张图片

线程与进程的关系

什么是进程

多线程面试题--线程基础_第2张图片

 什么是线程

多线程面试题--线程基础_第3张图片

 

区别

多线程面试题--线程基础_第4张图片

并行和并发的区别

单核情况

多线程面试题--线程基础_第5张图片

多核情况

多线程面试题--线程基础_第6张图片

 区别

多线程面试题--线程基础_第7张图片

 

线程创建的方式

继承Thread类

多线程面试题--线程基础_第8张图片

实现Runnable接口 

多线程面试题--线程基础_第9张图片

 实现Callable接口

多线程面试题--线程基础_第10张图片

线程池

多线程面试题--线程基础_第11张图片

 runnable 和 callable 有什么区别?

 多线程面试题--线程基础_第12张图片

 多线程面试题--线程基础_第13张图片

 什么时候抛出异常,处理异常?

1、在通用的方法里,不要try去捕获错误,而是直接抛出异常给调用层处理
2、用户访问界面处理掉所有可能的异常,并记录详细错误日志,然后返回友好的错误界面给用户,不要抛异常给用户,不友好.

异常应当在下层方法中不符合逻辑、出现异常的时候抛出,在上层进行捕获.

同样的,假使你为别人提供类库方法,在你的方法中,存在问题就应该抛出。

因为别人代码可能依赖于或者调用你的代码,在调用方可进行异常的捕获,从而能得到最原始的异常信息。

这就好比,小孩子你饿了,你就哭就是了(throw),没必要在吃奶阶段(下层)就开始坚强。

而处理问题则交给小孩的母亲(上层),因为她知道小孩可能会存在饿了就会哭的风险(可能会抛出异常),她会进行保护性应对(try catch)。

线程的 run()和 start()有什么区别?

start(): 用来启动线程,通过该线程调用run方法执行run方法中所定义的逻辑代码。start方法只能被调用一次。

run(): 封装了要被线程执行的代码,可以被调用多次。

线程包括哪些状态,状态之间如何变化的?

多线程面试题--线程基础_第14张图片

 变化图解多线程面试题--线程基础_第15张图片

总结

 多线程面试题--线程基础_第16张图片

 如何保证不同线程执行顺序

多线程面试题--线程基础_第17张图片

notify()notifyAll()有什么区别?

waitsleep方法的不同?

多线程面试题--线程基础_第18张图片

如何停止一个正在运行的线程?

多线程面试题--线程基础_第19张图片

 

你可能感兴趣的:(java,面试,jvm)