目录
线程与进程的关系
什么是进程
什么是线程
区别
并行和并发的区别
单核情况
多核情况
区别
线程创建的方式
继承Thread类
实现Runnable接口
实现Callable接口
线程池
runnable 和 callable 有什么区别?
什么时候抛出异常,处理异常?
1、在通用的方法里,不要try去捕获错误,而是直接抛出异常给调用层处理
2、用户访问界面处理掉所有可能的异常,并记录详细错误日志,然后返回友好的错误界面给用户,不要抛异常给用户,不友好.
异常应当在下层方法中不符合逻辑、出现异常的时候抛出,在上层进行捕获.
同样的,假使你为别人提供类库方法,在你的方法中,存在问题就应该抛出。
因为别人代码可能依赖于或者调用你的代码,在调用方可进行异常的捕获,从而能得到最原始的异常信息。
这就好比,小孩子你饿了,你就哭就是了(throw),没必要在吃奶阶段(下层)就开始坚强。
而处理问题则交给小孩的母亲(上层),因为她知道小孩可能会存在饿了就会哭的风险(可能会抛出异常),她会进行保护性应对(try catch)。
线程的 run()和 start()有什么区别?
start(): 用来启动线程,通过该线程调用run方法执行run方法中所定义的逻辑代码。start方法只能被调用一次。
run(): 封装了要被线程执行的代码,可以被调用多次。
线程包括哪些状态,状态之间如何变化的?
变化图解
总结
如何保证不同线程执行顺序
notify()和 notifyAll()有什么区别?
wait和sleep方法的不同?
如何停止一个正在运行的线程?