zoukankan      html  css  js  c++  java
  • java多线程的几种状态

    java线程状态在Thread中定义,源码中能看到有个枚举State,总共定义了六种状态:

    NEW: 新建状态,线程对象已经创建,但尚未启动

    RUNNABLE:就绪状态,可运行状态,调用了线程的start方法,已经在java虚拟机中执行,等待获取操作系统资源如CPU,操作系统调度运行。

    BLOCKED:堵塞状态。线程等待锁的状态,等待获取锁进入同步块/方法或调用wait后重新进入需要竞争锁

    WAITING:等待状态。等待另一个线程以执行特定的操作。调用以下方法进入等待状态。 Object.wait(), Thread.join(),LockSupport.park

    TIMED_WAITING: 线程等待一段时间。调用带参数的Thread.sleep, objct.wait,Thread.join,LockSupport.parkNanos,LockSupport.parkUntil

    TERMINATED:进程结束状态。

    状态之间的转换状态图,总结了下,如下:

    其中,Thread.sleep(long)使线程暂停一段时间,进入TIMED_WAITING时间,并不会释放锁,在设定时间到或被interrupt后抛出InterruptedException后进入RUNNABLE状态; Thread.join是等待调用join方法的线程执行一段时间(join(long))或结束后再往后执行,被interrupt后也会抛出异常,join内部也是wait方式实现的。

    wait方法是object的方法,线程释放锁,进入WAITING或TIMED_WAITING状态。等待时间到了或被notify/notifyall唤醒后,回去竞争锁,如果获得锁,进入RUNNABLE,否则进步BLOCKED状态等待获取锁。

    下面是一个小例子,主线程中调用多线程,等待超时后如果子线程还未结束,则中断子线程(interrupt)。

     
    转载:https://baijiahao.baidu.com/s?id=1574105592023615&wfr=spider&for=pc
  • 相关阅读:
    解决Chrome 70及以上版本的证书问题:Failed to load resource: net::ERR_CERT_SYMANTEC_LEGACY
    VUE使用axios数据请求时报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法
    生辰八字推算
    OneNote巧妙设置标题
    Kibana安装与介绍
    Logstash入门简介
    Metricbeat入门简介
    FileBeats入门简介
    ElasticSearch集群部署
    ElasticSearch安装与介绍
  • 原文地址:https://www.cnblogs.com/buxiu/p/10534472.html
Copyright © 2011-2022 走看看