玩转java多线程 之多线程基础 线程状态 及线程停止实战

    科技2022-07-10  160

    从网上先找了下,觉得这两张图比较好 比较清楚的看到线程的5大状态 新生状态:

    Thread t = new Thread()

    线程对象一旦创建,就进入到新生状态

    就绪状态 当调用start()方法,线程立即进入就绪状态的,但是并不意味着立即调度执行

    阻塞状态: 当调用sleep,wait或者是同步锁定时,线程进入阻塞状态,代码不往下继续执行,阻塞事件解除后,重新进入就绪状态,等待cpu的调度执行

    运行状态: 进入运行状态,线程真正执行线程体的代码块

    dead状态: 线程中断或者结束,一旦进入死亡状态,就不能再次启动

    线程方法:

    //更改线程的优先级 setPriority(int new Priority) //在指定的毫秒数让正在执行的线程休眠 static void sleep(long millis) //等待该线程终止 void join() //暂停当前正在执行的线程对象,并执行其他线程 static void yield() //中断线程,别用这个方式 void interrupt() //测试线程是否处于活动状态 boolean isAlive()

    停止线程,不推荐使用jdk提供的stop(),destroy()方法,这两个方法已经废弃

    推荐线程自己停止下来 建议使用一个标志位进行终止变量,当flag=false,终止线程运行

    好了,看下代码

    package duoxiancheng; //测试线程停止 public class TestStop implements Runnable{ //设置一个标志位 private boolean flag = true; @Override public void run() { int i = 0; while(flag) { System.out.println("run ... Thread" + i++); } } //设置一个公开的方法停止线程,转换标志位 public void stop() { this.flag = false; } public static void main(String[] args) { TestStop testStop = new TestStop(); new Thread(testStop).start(); for (int i = 0; i < 1000; i++) { System.out.println("main" + i); if(i == 900) { //调用stop方法切换标志位,停止线程 testStop.stop(); System.out.println("线程该停止了"); } } } }

    这个我都是在b站跟着狂神视频做的笔记, 大家有兴趣可以看下,讲的很赞 好了,今天就先到这里了~

    Processed: 0.051, SQL: 8