3、两种方式的区别:
1、java只支持单继承,所以继承Thread类就没办法继承其他的类,没有使用Runnable接口灵活
2、继承自Thread类,表示这个类就是一个线程类,可以直接启动线程实现Runnable接口,表示这个类是一个线程任务,需要创建线程对象从而执行这个线程任务
5、线程的状态[基本]
New:初始状态
线程对象被创建,即为初始状态,只在堆中开辟内存,与常规对象无异
Ready:就绪状态
调用start()之后,进入就绪状态,等待OS选中,并分配时间片。
Running:运行状态
获得时间片之后,进入运行状态,如果时间片到期,则回到就绪状态。
Terminated:终止状态
主线程main()或独立线程run()结束,进入终止状态,并释放所持有的时间片
6、线程常见的方法:
1、设置线程名称 (setName、getName、Thread.currentThread获取当前线程对象),如果没有设置线程名称,那么默认的名称为Thread-0 Thread-N
2、设置线程的优先级 (setPriority、getPriority),如果没有设置线程的优先级,那么默认的优先级为5,线程有的优先级为1~10之间,设置优先级只是提高了抢占CPU的概率
3、线程休眠 (Thread.sleep(毫秒数)),让当前线程进入到休眠状态,并让出CPU使用权,直到休眠结束,才会继续抢占CPU
4、线程礼让(Thread.yeild()),让出CPU使用权,但是立马又会去重新抢占CPU
5、线程加入(join()),在当前线程中加入另一线程,必须要将另一个线程执行完之后才会继续执行当前线程
7、线程的状态(等待)
初始状态 ------ 就绪状态 ------- 运行状态 ----- 限期等待 -----无限期等待 -------- 终止状态