首页 > 代码库 > 2.线程之状态
2.线程之状态
一、线程的状态有5种:
新生状态 就绪状态 运行状态 阻塞状态 死亡状态
二、线程的停止(重点)
1,自然终止:线程体执行完毕
2,外部干涉:
1>,线程体类 定义 线程体使用的标识
2>,线程体中使用该标识
3>,提供对外的方法改变该标识
4>,外部根据条件调用该方法
代码实现:
package com.cust.status;/** * 描述:线程的终止: * 1,自然终止:线程体执行完毕 * 2,外部干涉: * 1>,线程体类 定义 线程体使用的标识 * 2>,线程体中使用该标识 * 3>,提供对外的方法改变该标识 * 4>,外部根据条件调用该方法 * @author cookie */public class StopDemo implements Runnable{ private boolean flag = true;//定义标识 private int num=0; @Override public void run() { while(flag){//使用标识 System.out.println("stop--->"+num++); } } public void stop(){ //对外提供改变标识的方法 this.flag = false; } public static void main(String[] args) { StopDemo s = new StopDemo(); new Thread(s).start(); for(int i = 0; i < 100; i++){ if(i==50){ s.stop();//外部调用 } System.out.println("main----->"+i); } }}
二、线程的阻塞
- join:合并线程 c.join(); //等待c先执行
- yield: static 暂停当前正在执行的线程,先让别的线程执行
Thread.yield();//谁的内部调用谁暂停
- sleep: static 睡眠 不释放锁 Thread.sleep();
与时间相关:倒计时
模拟网络延时,并发 --->Web12306
join代码实现(yield类似):
package com.cust.status;/** * 描述:线程阻塞 * join:合并线程 t.join();//先将t执行完毕 * yield:暂停自己的线程,谁调用谁暂停Thread.yield * * @author cookie */public class JoinDemo extends Thread{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("join---->"+i); } } public static void main(String[] args) throws InterruptedException { JoinDemo demo = new JoinDemo(); Thread t = new Thread(demo); t.start(); //cpu调度执行 for (int i = 0; i <100; i++) { if(50==i){ t.join();//main方法阻塞 } System.out.println("main---->"+i); } }}
sleep倒计时:
package com.cust.status;import java.sql.Date;import java.text.SimpleDateFormat;/** * * 描述:倒计时 * @author cookie */public class SleepDemo01 { public static void main(String[] args) throws InterruptedException { //当前日期的10秒 Date endTime = new Date(System.currentTimeMillis()+1000*10); long end = endTime.getTime();//毫秒数 while(true){ System.out.println(new SimpleDateFormat("mm:ss").format(endTime));//格式化并输出 endTime = new Date(endTime.getTime()-1000);//构建下一秒时间 Thread.sleep(1000);//睡眠1秒 if((end-10000)>endTime.getTime() ){//10秒以内继续,否则退出 break; } } } public static void test1() throws InterruptedException { int num = 10; while(true){ System.out.println(num--); Thread.sleep(1000); if(num <=0){ break; } } }}
sleep网络延时---->并发
2.线程之状态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。