线程状态

38 篇文章 0 订阅
35 篇文章 0 订阅
线程状态:5大状态:新生、就绪、运行、阻塞、死亡
 *  新生:线程对象创建就进入新生状态,每个线程有自己的工作内存。
 *  就绪:调用了start方法就进入就绪状态,但不代表会被立即调度;阻塞事件解除,进入就绪状态;
 *      运行时调用yield(礼让线程,暂停,让出CPU的调度,等待调度)方法,进入就绪状态;jvm
 *      将CPU从本地线程切换到其他线程,进入就绪状态。
 *  运行:调度之后,进入运行状态,才真正执行线程体的代码块
 *  阻塞:调用sleep(抱着资源睡觉,每个对象都有一个锁,sleep不会释放锁;sleep(毫秒)可以用
 *   来模拟网络延迟或倒计时)、wait(在一边等,没有占用资源)、join(加入、插队,需要thread
 *   的对象调用)方法;IO流中的read、write方法。
 *  死亡:代码执行完正常结束;被强制中断执行,stop/destroy方法,不推荐使用,不安全,
 *       可以通过标识来控制:1.加入标识;2.关联标识;3.对外提供方法改变标识;4.调用,终止
 * state类可以通过thread对象.getState方法来获取状态:NEW:新生;RUNNABLE:就绪、运行:
 *    TIMED_WAITING:阻塞---有时间的等待;BOLCKED:阻塞----锁定;WATING:阻塞---等待;
 *    TERMINATED:结束

下面代码是获取状态、通过标识来控制线程和sleep的使用。

public class TestStatus implements Runnable{
    //1.加入标识  标记线程体是否可以运行
    private boolean flag = true;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public TestStatus(String name) {
        this.name = name;
    }

    @Override
    public void run() {
       int i = 0;
       while (flag){//2.flag = true 继续flag = false 停止
           System.out.println(name+"----"+i++);
       }
    }
    //3.对外提供方法改变标识
    public void terminate(){
        this.flag = false;
    }

    public static void main(String[] args) {
        TestStatus ts = new TestStatus("小白");
        Thread thread = new Thread(ts);
        System.out.println("状态1:"+thread.getState());
        thread.start();
        System.out.println("状态2:"+thread.getState());
        for (int i = 0; i < 99; i++) {
             try {
                Thread.sleep(5);
                System.out.println("状态3:"+thread.getState());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(i==88){
                ts.terminate();//4.线程终止
                System.out.println("over");
            }
            System.out.println("main----"+i);
        }
        System.out.println("状态4:"+thread.getState());
    }

}

yield礼让线程这里有用到

主要掌握sleep方法,wait方法一般和notify配合使用,一个等待,一个唤醒等待。后面线程协作会用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值