0
点赞
收藏
分享

微信扫一扫

线程状态切换

玉新行者 2022-03-30 阅读 93
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.线程正常终止 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 条评论