博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA中线程的各种状态
阅读量:2154 次
发布时间:2019-05-01

本文共 1515 字,大约阅读时间需要 5 分钟。

JAVA中线程的各种状态

线程的状态转换

这张图清晰的描述了线程状态由new到dead的过程中的转换细节。

new

线程的创建一般有俩种方式

  1. 继承Thread
    继承需要重写run方法
class TestThread extends Thread{    private static int i= 0;         public TestThread (){        i++;    }         @Override    public void run() {        System.out.println("创建的第"+i+"个线程");    }}
  1. 实现Runnable接口
    需要重写run方法
public class Test {    public static void main(String[] args)  {        System.out.println("主线程ID:"+Thread.currentThread().getId());        TestThread test= new TestThread ();        Thread thread = new Thread(test);        thread.start();    }}  class TestThread implements Runnable{         public TestThread () {             }         @Override    public void run() {        System.out.println("子线程ID:"+Thread.currentThread().getId());    }}

runnable

不管是如何创建线程,都需要调用start()启动线程,由上图可知,线程是通过start方法进入runnable(可运行状态)

注意:如果直接调用run方法并不会启动线程,TestThread.run()跟调用普通方法效果一样,只有start才会创建新的线程。

running

线程进入runnable状态,获取cpu时间/资源执行程序代码,这个状态就处于running运行中。

处于运行中的线程可以主动暂停运行,再次进入runnable状态,直到下次再次获取cpu时间,进入运行状态中,这个过程叫线程阻塞

线程阻塞的几种方式

Thread.yield();

线程让步,即释放cpu的资源时间,让给优先级更高的线程,但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!

Thread.wait();

线程等待,让当前线程进入等待列队(waitting queue),同时也会让当前线程释放它所持有的锁,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法后当前线程被唤醒

Thread.sleep();

线程等待,让出cpu资源指定时间,但是不会释放持有的锁,时间过之后又会处于运行中。

Thread.join();

等待调用此方法的线程(calling thread),直到该线程完成,此线程再继续

注意:
其中Thread.wait()属于等待阻塞
线程在获取同步锁时,如果该锁被其他线程占用,则进入锁池(lock pool)中,这种情况属于同步阻塞
Thread.sleep()和Thread.join()属于主动发起的阻塞。

terminated

运行完成终止状态,线程死亡,不可恢复。

转载地址:http://oqtwb.baihongyu.com/

你可能感兴趣的文章
走进JavaWeb技术世界6:Tomcat5总体架构剖析
查看>>
走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
查看>>
走进JavaWeb技术世界9:Java日志系统的诞生与发展
查看>>
走进JavaWeb技术世界10:从JavaBean讲到Spring
查看>>
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>
走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
查看>>
走进JavaWeb技术世界14:Mybatis入门
查看>>
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>