线程状态切换

package _03;

import java.text.SimpleDateFormat;
import java.util.Date;

public class _3_29ThreadStatus {
    public static void main(String[] args) throws InterruptedException {
        //新生-就绪-运行-阻塞-死亡
        //new 则表示线程新生
        //start 方法则表示线程进入就绪状态
        //阻塞: sleep()方法表示抱着资源不给别人用, 而wait是等资源阻塞的过程  join 插队

        //使线程停下来  不推荐使用stop方法  官方文档推荐加boolean状态变量进行控制
//        TerminateThread  tt = new TerminateThread();
//        new Thread(tt).start();
//        for(int i=0;i<99;i++){
//            System.out.println(Thread.currentThread().getName()+i);
//        }
//        tt.Terminate();

        //sleep方法  抱着资源睡觉  每个资源有个锁  sleep不会释放锁
        //sleep 通常模拟网络延迟 倒计时

//        int num =10;
//        while(num>=0){
//            Thread.sleep(1000);
//            System.out.println(num--);
//        }

        //倒计时
//        Date endtime = new Date(System.currentTimeMillis()+1000*10);
//        long end = endtime.getTime();
//        Date starttime = new Date(System.currentTimeMillis());
//        long start = starttime.getTime();
//        while(start <= end){
//            System.out.println(new SimpleDateFormat("mm:ss").format(starttime));
//            Thread.sleep(1000);
//            start = start + 1000;
//            starttime = new Date(start);
//        }


        //yield 礼让线程 让当前运行线程跳回就绪状态 不是阻塞状态
//        new Thread(new MyYield()).start();

        //join 合并(插队)线程 当前线程先执行,其余线程阻塞


//        MyJoin mj =new MyJoin();
//        Thread t = new Thread(mj);
//        t.start();
//        for(int i=0;i<100;i++){
//            if(i==50){
//                t.join();
//            }
//            System.out.println(Thread.currentThread().getName()+i);
//        }


        //线程的四种状态
        //1.NEW 、 RUNNABLE(就绪和运行) 、 BLOCKED、 WAITING、 TIMED_WAITING、 TERMINATED

        Thread t = new Thread(()->{
            for(int i=0;i<5;i++){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        //观察状态
        Thread.State state = t.getState();
        System.out.println(state);

        t.start();
        state = t.getState();
        System.out.println(state);


        while(true){
            int num = Thread.activeCount();  //统计当前线程的数量
            System.out.println(num);         //IDEA会帮你再创建一个线程  3个
            state = t.getState();
            System.out.println(state);  //TIMED_WAITING
        }
        
    }
}

//终止线程的方式
//1.线程正常终止 2.使用状态变量  不推荐stop、destory()方法
class TerminateThread implements  Runnable{

    //状态标识符
    private boolean flag = true;

    @Override
    public void run() {
        int i=0;
        while(flag){
            System.out.println(i++);
        }

    }
    //对外提供改变状态的方法
    public void  Terminate(){
        flag = false;
    }

}

class MyYield implements  Runnable{
    @Override
    public void run() {
        System.out.println(System.currentTimeMillis());
        Thread.yield(); //重回就绪状态 大家公平竞争
        System.out.println(System.currentTimeMillis());
    }
}

class MyJoin implements  Runnable{

    @Override
    public void run() {
        for(int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值