关于Thread的一些

线程有几种状态:

1.产生(new):线程已经产生,只是放在内存中啥事都不干。

2.可运行(runnable):在调用了start方法到它获得系统给它分配了时间片之前,或者时间片用完了但还没执行完。

3.运行(running):获得了时间片,正在运行。

4.死亡(dead):执行完成

5.阻塞(block):不可运行状态都是由可运行状态转变来的。一个处于可运行状态的线程,如果遇到挂起 (suspend)操作、睡眠(sleep)操作或者等待(wait)操作,就会进入不可运行状态。另外,如果 一个线程是和I/O操作有关的,那么,在执行I/O指令时,由于外设速度远远低于处理器速 度而使线程受到阻塞,从而进入不可运行状态,只有外设完成输入/输出之后,该线程才会自 动回到可运行状态。线程进入不可运行状态后,还可以再回到可运行状态。通常有三种途径 使其恢复到可运行状态。

通过睡眠(sleep)操作而进入不可运行状态的线程会在过了指定睡眠时间以后自动恢 复到可运行状态;由于I/O阻塞而进入不可运行状态的线程在外设完成I/O操作后,自动 恢复到可运行状态。

通过wait()方式进入第五种方式的线程可以用通知(notify或notiyA11)方法使其转到第二种状态。
 

从操作系统的角度讲,os会维护一个ready queue(就绪的线程队列)。并且在某一时刻cpu只为ready queue中位于队列头部的线程服务。

sleep(int millis):应该是第五种状态,但在指定的毫秒数到了之后又会回到就绪队列中即第二种状态。

yield():直接从第三种状态拉到第二种状态,不管时间片完没有。

suspend(),resume():同过suspend方法可以使线程进入block状态,进入该状态后除非使用resume使其转至runnable,否则它不会回到runnable状态。执行了suspend方法后的线程他不会释放它的锁标识

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值