day19
多线程
多任务执行,多路径执行 如果没有多任务,就不需要使用多线程
线程的创建与开启
1.继承Thread类 ,重写run() + start()
注意 继承父类->单继承 run方法不能抛出异常,没有返回值
2.实现Runnable接口,重写run() + start()
推荐:简单,优点:接口可以多实现,类只能单继承
3.juc包下Callable接口,重写call()方法
优点:call方法可以抛出异常可以定义返回值
缺点:使用复杂麻烦
线程的状态:
新生状态 : new Thread(),new的时候就是一个线程进入新生状态
就绪状态 : start() 一个线程就会进入到就绪状态,进入就绪队列进行等待,可以等待cpu的调度
运行状态 : 当cpu调用调度到就绪队列中的某一个线程,这个线程开始进入运行状态
阻塞状态 : 线程无法正常执行,可以能会进入到阻塞状态
终止状态 : 线程执行完毕
一个线程如何进入到就绪状态:
1.start() 2.线程切换 : 被切换的线程恢复到就绪状态,等待下一次被调用 3.阻塞解除 4.yield() 礼让线程
进入阻塞状态的方式:
1.sleep() 2.join() 3.wait() 4.IO等
进入终止状态的方式:
1.stop() 终止方法-->不推荐使用->比较暴力手法
2.通过添加标识判断 --> 推荐
3.正常执行完毕
注意:
1.一个线程一旦执行完毕,不能回复,重新new,也是新的线程
2.阻塞解除无法直接恢复到运行状态,会恢复到就绪状态,等待下一次被cpu调度