Thread类是Java用来创建线程的一个类,实现多线程的途径;
线程的状态:
在Java中线程一般有五种状态分别是:创建,就绪,运行,阻塞和死亡;
1. 创建状态:
即时完成创建线程对象的过程,但是还没有调用start()方法,此时线程就处于创建态(NEW),当前创建状态是不能被系统调度使用的;
2.就绪状态:
就是用线程对象调用start()方法后线程就会成为就绪状态(RUNNABLE),此时线程就具备了被系统调度的能力,同时线程在阻塞态或是睡眠中被唤醒也会进入就绪态;
3.运行状态:
顾名思义当前线程被系统调度,正在运行,线程会运行继承Thread类的类中重写run() 方法的中的代码;
4.阻塞状态:
线程正在运行时被暂停,通常是等待某些资源的准备(例如用户输入)。sleep,suspend,wait等方法都可以导致线程阻塞。
5.死亡状态:
如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。
start()方法:
start()方法是用来启动线程的,它是用来把线程从创建状态转换成就绪状态的( NEW -----> RUNNABLE ) 如果一个线程被创建出来,但是不调用start()方法,它是永远会处于创建状态的,是不能被系统调度的;
值得注意的是:调用start()方法后,线程不是立马执行的,而是具备了被系统调度的能力,具体何时被执行,要看系统的调度机制如何安排。还有就是由于在线程的生命周期里,创建状态到就绪状态是单向的且只能执行一次因此同一个线程对象的start()方法也只能被调用一次;
run()方法:
其实run()方法就是普通方法,主动调用和调用普通方法一样,会顺序执行一次;
但如果是主动调用,那么该run()方法就是在主线程main上运行的,并不会在子线程上运行,要想实现多线程,在子线程上运行就需要使用start()方法,在调用start()方法后,如果系统调度了当前线程,那么会自动执行run()方法;