线程的生命周期分为5个状态。
(1)新建状态(Create):创建一个线程类的对象后,产生的新线程就进入新建状态。
如:Thread myth=new MyThread();
(2) 可运行状态(Runable):也叫就绪状态,调用start()方法后进入。
(3) 运行状态(running):当处于就绪状态的线程被调用并获得了cpu等执行必须的资源时,就进入了运行状态。
myth.run();
(4) 挂起状态(blocked):也叫堵塞状态,当下面的四种情况·之一出现时就会进入:
调用了sleep()方法
调用了wait()方法。
如果线程中使用synchronized来请求对象的锁未获得时。
如果线程中有输入输出操作。
如果一个线程进入了挂起状态,就无法进入就绪队列。这时,通常需要由某些事件才能唤醒,具体由什么唤醒取决于挂起的原因。
(5) 停止状态(dead):线程已经退出运行状态,并且不再进入就绪状态。产生这种现象的原因可能是线程已经执行完毕,或者被另一个进程强行杀死。
- 线程的基本控制
(1)终止线程
线程run()方法执行完毕后,会自然终止。
也可通过调用stop()方法来终止线程。
(2)测试线程状态
可以通过isAlive()方法来来获取线程是否处于活动状态。start()后,终止前,都属于活动状态。
(3)线程的暂停与恢复
sleep()方法:将线程停止若干毫秒。
join()方法:当前线程等待调用该方法的线程结束后,再恢复执行。
- 线程的调度和优先级
设置线程优先级的格式为:
线程名.setPriority(i);
其中,i的取值为1~10,10为最大优先级。
Thread类有三个优先级静态常量:
MAX_PRIORITY:最大优先级,10。
MIN_PRIORITY:最小优先级,1。
NORM_PRIORITY:普通优先级,5。