java线程状态(Thread States)

转载 2012年03月22日 11:58:48


1.       程序通过Thread t = new Thread(),调用t.start()启动一个线程,使该线程进入可运行(Runnable)的状态。

2.       JVM的决定去调度(Scheduler) 在可运行状态(Runnable)下的线程,使该线程处于运行 (Running) 状态,由于JVM的调度会出现不可控性,即不是优先级高的先被调用,可能先调用,也可能后调用的的情况。运行状态(Running)下,调用礼让yield()方法,可以使线程回到可运行状态(Runnable)下,再次JVM的调度(并不依赖优先级)。

3.       线程在Running的过程中可能会遇到阻塞(Blocked)情况

①.调用join()sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。

②.调用wait(),使该线程处于等待池(wait blocked pool),直到notify()/notifyAll(),线程被唤醒被放到锁池(lock blocked pool ),释放同步锁使线程回到可运行状态(Runnable

③.Running状态的线程加同步锁(Synchronized)使其进入(lock blocked pool ),同步锁被释放进入可运行状态(Runnable)

4.       线程run()运行结束或异常退出,线程到达死亡状态(Dead)

sleepwait的区别有:
1:这两个方法来自不同的类分别是ThreadObject
2
:最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3waitnotifynotifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
x.notify()
//
或者wait()
}
4
sleep必须捕获异常,而waitnotifynotifyAll不需要捕获异常

5:其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

notifyAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。


Java线程的5种状态及切换(透彻讲解)

Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的star...
  • pange1991
  • pange1991
  • 2016年12月24日 16:57
  • 7304

Thread详解3:线程的状态及几个简单方法

1 线程状态类型 新建状态(New):新创建了一个线程对象。 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获...
  • cds86333774
  • cds86333774
  • 2016年03月27日 19:05
  • 2334

thread的六种状态

线程共有6种状态;在某一时刻只能是这6种状态之一。这些状态由Thread.State这个枚举类型表示,并且可以通过getState()方法获得当前具体的状态类型。   NEW   至今尚未...
  • lifei128
  • lifei128
  • 2014年03月03日 11:17
  • 16583

java 线程的几种状态

java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是...
  • candyzh
  • candyzh
  • 2016年09月07日 12:28
  • 1582

java线程研究---(4)暂停Thread:sleep

暂停Thread sleep方法: 顾名思义,睡一会。静态方法Thread.sleep()sleep方法会让Thread对象暂时停止一段时间(即,进入blocked暂停状态),然后又恢复继续执...
  • miqi770
  • miqi770
  • 2015年08月10日 11:57
  • 1687

Java线程状态中BLOCKED和WAITING有什么区别?

刚才在看CSDN的问答时,发现这个问题。原问题的作者是在观察jstack的输出时提出的疑问,那么BLOCKED和WAITING有什么区别呢? 答复在JDK源码中可以找到,如下是java.lang.T...
  • babyblue_963
  • babyblue_963
  • 2015年08月23日 17:48
  • 8260

判断线程运行状态的两种方法

判断线程运行状态的两种方法 判断线程运行状态的方法有很多,如可以采用类似于对象计数器的方法等等,那么这里向你介绍两种判断线程运行状态的方法,希望对你有所帮助。 AD:51CTO 网+ 第十二期...
  • Ibanezsc
  • Ibanezsc
  • 2016年07月29日 16:42
  • 2320

利用jstack查看线程运行状态

首先一段代码 public class P173ThreadState { public static void main(String[] args) { new Thread(new T...
  • qq_29631069
  • qq_29631069
  • 2017年04月26日 23:13
  • 571

Java并发编程系列之七:正确终止与恢复线程

前面提到了stop()、suspend()等方法在终止与恢复线程的弊端,那么问题来了,应该如何正确终止与恢复线程呢?这里可以使用两种方法:interrupt()方法和使用boolean变量进行控制。在...
  • u011116672
  • u011116672
  • 2016年04月02日 17:27
  • 5869

多线程基础知识第二篇:线程常用方法及各种状态

本篇主要介绍一下Thread类的方法以及探究一下线程的状态。 首先,Thread类常用的静态方法: 1.Thread.activeCount(),得到存活的线程数,返回值是int类型; 2.Threa...
  • koushr
  • koushr
  • 2015年07月15日 12:03
  • 1122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java线程状态(Thread States)
举报原因:
原因补充:

(最多只允许输入30个字)