一、线程的状态
线程的主要状态有:
1.新建状态(New) :线程被创建后,并不是马上启动,而是进入新建状态。此时线程还没有得到分配的资源。
2.可运行状态(Runnable) :新建状态的线程在被调用start()方法后,进入可运行状态,此时线程已经得到了必要的运行时资源,只差CPU的调度。
3.运行状态(Running) :得到运行时必要资源的线程,一旦线程占有了CPU,就进入了运行状态。
4.阻塞状态(Blocked) :这是线程有资格运行时它所处的状态。实际上这个三状态(等待/阻
塞/睡眠状态)组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话
说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态;如果运行状态的线程
调用了yield()方法、sleep()方法、join()方法或者wait()方法,或者申请对象锁而没有得
到结果、或者有更高优先级的线程进入调度等,都可以进入阻塞状态。
5.终止状态(Dead) :当运行状态的线程正常执行完毕后,就进入了终止状态。线程一旦死去
或者终止,就不能够重新调用start()方法,否则抛出异常:
java.lang.IllegalThreadStateException
二、线程的控制方法
1.暂停类方法:
A. sleep(): Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态
方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它入睡
在某个地方,在苏醒之前不会返回到可运行状态。当睡眠时间到期,则返回到可运行状态。
线程睡眠的原因:线程执行太快,或者需要强制进入下一轮,因为Java规范不保证合理的轮
换。
睡眠的实现:调用静态方法:Thread.sleep(3000);
睡眠的位置:为了让其他线程有机会执行,可以将Thread.sleep()的调用放线程run()之内。
这样才能保证该线程执行过程中会睡眠。
2.状态类方法:
1).interrupt()
功能:清除线程因调用暂停类方法而产生的中断状态,并且向该线程发送InterruptException类异常。
2).currentThread()
说明:静态方法。
功能:返回当前线程的引用。
3).isAlive()
功能:返回当前线程的运行状态。
3.启停类方法:
1).start() : 启动线程的方法,线程开始运行。
2).stop(): 强行中止线程的运行,引方法容易造成数据不一致。
3).suspend():挂起线程,挂起后的线程将不能像sleep()方法那样自动恢复,只能在其他线
程中调用resume()方法恢复线程的状态,本方法不释放线程中持有的锁,容易引起死锁。
4).resume():恢复线程执行。在线程交互过程中,不提倡使用suspend()和resume()方法。
<!--EndFragment-->