java 线程的状态与控制

一、线程的状态

 

线程的主要状态有:

 

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-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值