线程第六课,线程状态与停止线程
来源:互联网 发布:vs怎么连接sql数据库 编辑:程序博客网 时间:2024/05/19 09:12
一、线程状态
1、新生状态
用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态
2、就绪状态
处于就绪状态的线程已经具备了运行条件,但还没有分配到cpu,处于线程就绪队列,等于系统为其分配cpu。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待执行状态进入执行状态,系统挑选的动作称之为“cpu调度”。一旦获得cpu。线程就进入运行状态并自动调用自己的run方法。
3、运行状态
在运行状态的线程执行自己的run方法中代码,知道调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。
4、阻塞状态
处于运行状态的线程在某些情况下,如执行了sleep方法,或等待I/O设备等资源,将让出cpu并暂停停止自己的运行,进入阻塞状态。在阻塞状态的线程不能进入绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程变转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。
5、死亡状态
死亡状态是线程声明周期中的最后一个阶段。线程死亡的原因有两个,一个是正常运行的线程完成了他的全部工作;另一个是线程被强制性的终止,如果通过执行stop或destroy方法来终止一个线程【不推荐使用这两个方法,前者会产生异常,后者是强制终止,不会释放锁】
如何停止线程
1、自然终止:线程体正常执行完毕
2、外部干涉:
- 线程类中,定义线程体使用的标识
- 线程体使用该标识
- 提供对外的方法改变该标识
- 外部根据条件,调用该方法即可
package com.pkushutong.DemoThread;public class Test05 {public static void main(String[] args) {demo d= new demo();new Thread(d).start();//外部干涉for(int i=0; i<50; i++){if(i == 20){//外部干涉d.stop();}System.out.println("main....."+i);}}}class demo implements Runnable{//线程类中,定义线程体使用的标识private boolean flag = true;@Overridepublic void run() {//线程体使用该标识while(flag){System.out.println("Thread.....");}}//提供对外的方法改变该标识public void stop(){this.flag = false;}}
0 0
- 线程第六课,线程状态与停止线程
- 线程状态与停止
- Java线程状态、线程停止、线程阻塞
- Java线程状态、线程停止、线程阻塞
- Java线程与线程状态
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- 线程停止
- 停止线程
- 停止线程
- 停止线程
- 停止线程
- mac下编辑配置文件命令
- scanf/printf/getchar/putchar/gets/puts/
- 2-16(采用数组方式)
- GooglePlay产品经理教你如何设计开发高质量App
- 百度首页背景图片设置-图片撑满整个body效果
- 线程第六课,线程状态与停止线程
- 使用GestureLibrary将手势保存到文件
- SSDB 添加接口
- Null 设计模式
- 日期计算
- 《Hadoop基础教程》之初识Hadoop
- 每个程序员需掌握的20个代码命名小贴士
- IOS - 6\7下UINavigationBar的颜色的方法改变
- 浅谈HTTP中Get与Post的区别