java线程四种状态

一个线程可以有四种状态:

1、新(new), 即线程刚刚创建,而并未执行

2、可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞”。

3、Dead,从自己的run()方法中返回后,一个线程便已“死”掉。亦可调用 stop()令其死掉,但会产生一个违例——属于Error的一个子类(也就是说,我们通常不捕获它)。记住一个违例的“掷”出应当是一个特殊事件,而不是正常程序运行的一部分。所以不建议你使用stop()(在Java 1.2 则是坚决反对)。另外还有一个destroy()方法(它永远不会实现),应该尽可能地避免调用它,因为它非常武断,根本不会解除对象的锁定。

4、阻塞(Blocked),线程可以运行,但有某种东西阻碍了它。若线程处于堵塞状态,调度机制可以简单地跳过它,不给它分配任何CPU时间。除非线程再次进入“可运行”状态,否则不会采取任何操作。为什么会阻塞呢,原因有:
  (1)调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。

  (2)用suspend()暂停了线程的执行。除非线程收到 resume()消息,否则不会返回“可运行”状态。

  (3)用wait()暂停了线程的执行。除非线程收到 nofify()或者notifyAll()消息,否则不会变成“可运行”

  (4)线程正在等候一些 IO(输入输出)操作完成。

  (5)线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

时间: 10-22

java线程四种状态的相关文章

java线程五种状态

java线程五种状态: 创建 -> 就绪 -> 运行 -> 销毁 创建 -> 就绪 -> 运行 -> 等待(缺少资源) -> 销毁 下图:各种状态转换

Java多线程(4)----线程的四种状态

与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂起和唤醒线程 6 public void resume( ); // 不建议使用 7 public void suspend( ); // 不建议使用 8 public static v

Java的四种引用源代码例子

Java的四种引用源代码例子 不解释,直接上代码,千言万语顶不住一行代码. package com.apkkids.javalanguage; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference

Java的四种引用类型

Java中有四种引用类型:强引用.软引用.弱引用.虚引用.--应该是从1.2版本开始添加的. 这个概念是与垃圾回收有关的. 如果你不知道这几个概念,那你用的肯定都是强引用.例如String str = new String(); 这个str到 new String() 的引用类型就是强引用. 那什么是弱引用呢?先看一段代码: 1 package cn.larry.pojo; 2 3 public final class Product { 4 private String name; 5 6 p

a链接的四种状态

四种状态:hover.link.active.visible a:link{color:#fff;} a链接初始化 a:hover{color:yellow;} 把鼠标放上去的状况 a:active{color:pink;} 触发时候的状态,按下去不松开的情况 a:visited{color:green;} 访问后的情况

>hibernate的四种状态

hibernate的四种状态 1.临时状态 与数据库中没有相对应的数据,也不在session的管理之中,一般是新new出来的对象 2.持久化状态 对象在session的管理中,最后会在事务提交后,在数据库中有相对应的记录 该状态有两个特点①有OID      ②对对象的修改会同步到数据库中 3.游离状态 数据库中有相对应的记录,该对象不再session的管理中,修改此对象时,该数据库不会有变化 4.删除状态 执行了delete()方法的对象,最后被回收

HTML5样式和列表、CSS链接的四种状态

一.HTML5样式 1.标签: <style>:样式定义: <link>:资源引用: 2.属性: type="text/css":引入文档类型: rel="stylesheet":外部样式表: 3.三种样式表插入方法: (1)外部样式表: 在<head></head>中写入: <link  rel="stylesheet"  type="text/css"  href=&q

Java的四种引用,强弱软虚,用到的场景

众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活).为了解决内存操作不灵活这个问题,可以采用软引用等方法. 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及状态,程序才能使用它.这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走.一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不

java多线程四种实现模板

假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程? 这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快... 这里把模板放在这里,需要用的时候寻找合适的来选用. 总体分为两种: 一.使用匿名内部类的方式(推荐) 1)方式1开启多线程(Thread) //使用第一种方式,开启线程 new Thread() { public void run() { for(int i=0;i<100;i++) { System.out.println(Thread.currentThr

Java线程的六种状态

java线程有很多种状态,最主要的有六种,被创建.运行.睡眠.等待.阻塞以及消亡六种,也有很多归结为5种,把睡眠以及等待归结为冻结: 被创建:就是线程被创建,就是new thread()之后就是创建一个线程: 运行:线程被创建之后通过 start()方法就可以启动线程,执行线程的run()方法,这时候线程就是在运行的状态,运行状态就是指线程在执行run方法的过程: 睡眠:线程有sleep(),然后可以自定义时间,线程在运行中只要调用sleep(),线程就会进入睡眠时间,睡眠状态就是线程什么事都不