打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
线程的状态
一、线程有哪些状态
 
线程的全部状态如下:
 
      born(新生),runnable(可运行),running(运行),waiting(等待),sleeping(睡眠),blocked(阻塞),dead(死亡)。
 
二、状态之间的关系:
当一个Runnable类型对象的构造函数第一次被调用时,一个新的的线程就诞生了。除非我们在构造函数中调用了start方法,否则这个新线程将作为一个新对象呆在内存中基本上什么事情也不做。当我们在构造函数或者main函数中对这个线程调用了start方法,或者这个线程在程序的其他任何位置使他自己的状态由born改变为runnable的线程之后,调度程序就可以把处理器分配给这个线程。
 
把处理器分配给一个处于runnable的线程之后,这个线程的状态就变成了running。如果一个处于running状态的线程能够运行到结束,她的状态就会变为dead。否则,这个线程的命运就取决于当前是否还有其他线程等待处理器运行。如果这个线程在当前所有处于runnable状态的线程中具有最高优先级那么他就就会继续执行,除非这个线程被运行程序的平台划分为时间片。当线程被划分为时间片时,一个处于running状态的线程将分配到一个固定间隔的处理器时间--quantum。具有相同优先级的线程的时间片调度将导致这些线程被轮流执行。如果正在执行的线程的代码包含了yield方法,那么这个处于running状态的线程将停止运行,并把处理器交给其他进程。
 
一个正在运行的线程可以通过调用sleep()方法转换为sleep状态。如果一个线程包含了很长的循环,在循环的每次迭代之后把这个线程切换到sleep状态是一种很好的策略,他可以保证其他线程不必等待很长时间才能轮到处理器执行。当一个正在运行的线程进入到sleep状态时,其中一个等待线程就会切换到处理器。在很长的循环中,我们也可以使用yield方法来代替sleep方法。
 
在run方法的I/O操作期间,处理器无法从一个线程切换到另外一个线程,及时时使用时间片的调度策略也是如此。我们把这种情况称为线程由于I/O操作而阻塞。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
java学习日记_线程
中断线程Interrupt与Interrupted的用处
Java线程的5种状态及切换(透彻讲解)
一张图让你看懂JAVA线程间的状态转换
Linux进程线程的区别
徐葳【2019版最新】40小时掌握Java语言之05多线程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服