学习笔记——JAVA线程<2>线程的状态
来源:互联网 发布:精准医疗信息数据库 编辑:程序博客网 时间:2024/06/05 00:11
一,线程状态
1,新生状态 new或者thread类创建一个线程对象后,通过start方法进入就绪状态(runnable)
2,就绪状态 还没有分配到cpu等待分配 cpu调度后进入运行状态执行run方法
3,运行状态 执行run方法的代码直到调用到其他方法终止,或等待某资源而阻塞或完成任务死亡。如果在给定的时间内没有执行结果,就会被系统换下来回到执行状态
4,阻塞状态 运行中的线程如执行sleep方法或等待I/O设备的资源将让出cpu并且暂停自己的运行进入阻塞。在阻塞状态下的线程不能进入就绪队列。只有阻塞的原因解除后才能进入就绪状态。重新回到就绪队列中排队,被系统选中后从原来停止的位置开始继续运行
5,死亡状态 生命周期的最后一个阶段,原因有两个:1,正常运行的线程完成了他的工作2,线程被强制终止
二,停止线程
1,自然终止
2,外部干涉
1>线程类中 定义 线程使用的标志
2>线程体使用标志
3>提供对外的方法使用标志
4>外部根据条件调用停止的方法
package study;public class ThreadDome { public static void main(String[] args) { Thraed1 t1 =new Thraed1(); new Thread(t1).start(); for (int i = 0; i < 100; i++) { if (50==i) { t1.stop(); } System.out.println("main...."+i); } }}class Thraed1 implements Runnable{ private boolean flag = true; @Override public void run() { while(flag){ System.out.println("线程运行中..."); } } public void stop() { this.flag = false; } }
三,阻塞
1,join:合并线程
package study;/** * join:合并线程 * @author http://blog.csdn.net/thewaiting/ */public class ThreadDome extends Thread{ public static void main(String[] args) throws InterruptedException { ThreadDome t1 =new ThreadDome(); Thread t = new Thread(t1);//新生 t.start();//就绪 //cpu调度到就运行 for (int i = 0; i < 100; i++) { if (50==i) { t.join();//mian阻塞 } System.out.println("main..."+i); } } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("jion..."+i); } }}
2,yield 暂停线程
暂停自己让出cpu
package study;/** * join:合并线程 * @author http://blog.csdn.net/thewaiting/ */public class ThreadDome extends Thread{ public static void main(String[] args) throws InterruptedException { ThreadDome t1 =new ThreadDome(); Thread t = new Thread(t1);//新生 t.start();//就绪 //cpu调度到就运行 for (int i = 0; i < 100; i++) { if (i%20==0) {//当被20整除时暂停 //暂停本线程main Thread.yield(); } System.out.println("main..."+i); } } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("yeild..."+i); } }}执行结果片段:main...20yeild...30
3,sleep 间隔执行
休眠暂停当前执行
当休眠时占用的资源别的线程不能访问,不释放锁
1>与时间相关
2>模拟网络延时
倒计时
package study;import java.text.SimpleDateFormat;import java.util.Date;/** * 网络延时 * 1,倒数10,1秒一个 * @author http://blog.csdn.net/thewaiting/ */public class ThreadDome extends Thread{ public static void main(String[] args) throws InterruptedException { Date enDate =new Date(System.currentTimeMillis()+10*1000); long end = enDate.getTime(); while(true){ //输出 System.out.println(new SimpleDateFormat("mm:ss").format(enDate)); //构建下一秒的时间 enDate = new Date(enDate.getTime()-1000); 等待一秒 Thread.sleep(1000); //在10秒以内就继续 if (end-10000<enDate.getTime()) { break; } } }}
阅读全文
0 0
- 学习笔记——JAVA线程<2>线程的状态
- 学习笔记——JAVA线程<3>线程的基本信息
- 学习笔记——JAVA线程<4>线程的同步
- 学习笔记——JAVA线程<5>线程的死锁
- 学习笔记——JAVA线程<7>线程的总结
- 【Java学习笔记】11:线程的状态转换1
- 黑马程序员--Java学习笔记之多线程(自定义线程的两种方式对比、线程状态、线程安全)
- Java SE学习笔记:线程通信、生产者与消费者案例、线程状态(线程的生命周期)、线程操作、Condition类
- java多线程学习之一——线程的状态、上下文切换和线程监控
- java多线程——线程的状态
- 【Java学习笔记】12:线程的状态转换2与优先级调度
- 线程的状态学习
- java线程学习2——线程的生命周期
- 多线程学习笔记——判断线程状态
- JAVA学习笔记50——线程状态+停止进程+阻塞进程
- Java线程的学习笔记
- java线程的状态
- java线程的状态
- mysql 常用
- 拦截器和过滤器的区别
- 单例设计模式
- 毕业那年
- BigDecimal加减乘除运算
- 学习笔记——JAVA线程<2>线程的状态
- 闭包的简单理解
- 远程登陆MySQL-指定ip和端口号
- Java反射机制详解
- 增量备份+增量备份的实现方式+差异备份案例+累积备份案例
- [笔记]: 并查集
- input子系统浅析
- 实时监测网络状态
- scala中Actor特性,对象之间通信使用