学习笔记——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;            }        }    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两个月大的宝宝鼻子不通气怎么办 宝宝6个月咳嗽有痰怎么办 6个月的宝宝有痰怎么办 小孩流有点咳嗽和脓鼻涕怎么办 6个月的宝宝流鼻涕该怎么办? 小孩鼻塞不流鼻涕总吸鼻子怎么办 四个多月宝宝感冒鼻塞严重怎么办 怀孕6个月严重感冒鼻塞怎么办 16个月的宝宝上火流鼻血怎么办 小狗咳嗽打了针还不好怎么办 孕妇感冒后鼻涕带血口腔发炎怎么办 宝宝出生17天睡眠不安稳怎么办 月子里宝宝睡觉老是睡不安稳怎么办 孕妇晚期咳嗽鼻涕黄咽喉痛怎么办 狗狗流脓鼻涕拉稀没食欲怎么办 孕妇眼睛充血很快就有眼屎怎么办 婴儿的眼睛流泪生眼屎怎么办呀 刚出生的婴儿眼睛有眼屎怎么办 25天的婴儿鼻子有鼻屎不通怎么办 一个月的宝宝好多鼻屎怎么办 隆鼻取线的时候好多鼻屎怎么办 小孩流浓鼻涕怎么办最简单方法 小孩流黄鼻涕怎么办最简单方法 一岁八个月宝宝鼻涕和痰多怎么办 空调铜管过不了预埋管的弯头怎么办 如果朝鲜和韩国打起来中国怎么办 寄信时不知道对方的邮编怎么办 地下钱庄转账后银行户被冻结怎么办 老师遇到素质极差的垃圾学生怎么办 验证码忘了手机号也换了怎么办 手机上的验证码忘了怎么办 进入医联网的验证码忘了怎么办 育碧换电脑了无法同步云存档怎么办 刺客信条起源育碧需要激活码怎么办 电脑连不上网怎么办wifi可以用 电脑登录账号密码错误锁定了怎么办 白色T恤衫上沾上黑色的黄油怎么办 家教遇到成绩好的学生该怎么办 跟越南人离婚孩子中国户口9怎么办 老婆是个越南人至今没户口怎么办 等离子屏z板链接处排线打火怎么办