知识大全 Java 线程的几种状态

Posted 状态

篇首语:心静可以生慧,行善方能得福。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java 线程的几种状态相关的知识,希望对你有一定的参考价值。

Java 线程的几种状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

线程有四种状态 任何一个线程肯定处于这四种状态中的一种      ) 产生(New) 线程对象已经产生 但尚未被启动 所以无法执行 如通过new产生了一个线程对象后没对它调用start()函数之前      ) 可执行(Runnable) 每个支持多线程的系统都有一个排程器 排程器会从线程池中选择一个线程并启动它 当一个线程处于可执行状态时 表示它可能正处于线程池中等待排排程器启动它 也可能它已正在执行 如执行了一个线程对象的start()方法后 线程就处于可执行状态 但显而易见的是此时线程不一定正在执行中      ) 死亡(Dead) 当一个线程正常结束 它便处于死亡状态 如一个线程的run()函数执行完毕后线程就进入死亡状态      ) 停滞(Blocked) 当一个线程处于停滞状态时 系统排程器就会忽略它 不对它进行排程 当处于停滞状态的线程重新回到可执行状态时 它有可能重新执行 如通过对一个线程调用wait()函数后 线程就进入停滞状态 只有当两次对该线程调用notify或notifyAll后它才能两次回到可执行状态 class Object下常用的线程函数    wait() notify()和notifyAll()这三个函数由java lang Object类提供 用于协调多个线程对共享数据的存取      ) wait()函数有两种形式 第一种形式接受一个毫秒值 用于在指定时间长度内暂停线程 使线程进入停滞状态 第二种形式为不带参数 代表waite()在notify()或notifyAll()之前会持续停滞      ) 当对一个对象执行notify()时 会从线程等待池中移走该任意一个线程 并把它放到锁标志等待池中 当对一个对象执行notifyAll()时 会从线程等待池中移走所有该对象的所有线程 并把它们放到锁标志等待池中      ) 当调用wait()后 线程会释放掉它所占有的 锁标志 从而使线程所在对象中的其它synchronized数据可被别的线程使用     例     下面 我们将对例 中的例子进行修改    class TestThreadMethod extends Thread    public static int shareVar = ;    public TestThreadMethod(String name)    super(name)         public synchronized void run()    if(shareVar== )    for(int i= ; i< ; i++)    shareVar++;    if(shareVar== )    try    this wait() //( )        catch(InterruptedException e)                if(shareVar!= )    System out print(Thread currentThread() getName())     System out println( shareVar = + shareVar)     this notify() //( )                public class TestThread    public static void main(String[] args)    TestThreadMethod t = new TestThreadMethod( t )     TestThreadMethod t = new TestThreadMethod( t )     t start() //( )    //t start() ( )    t start() //( )        运行结果为     t shareVar =     因为t 和t 是两个不同对象 所以线程t 调用代码( )不能唤起线程t 如果去掉代码( )的注释 并注释掉代码( ) 结果为     t shareVar =     t shareVar =     这是因为 当代码( )的线程执行到代码( )时 它进入停滞状态 并释放对象的锁状态 接着 代码( )的线程执行run() 由于此时 shareVar值为 所以执行打印语句并调用代码( )使代码( )的线程进入可执行状态 然后代码( )的线程结束 当代码( )的线程重新执行后 它接着执行for()循环一直到shareVar= 然后打印shareVar cha138/Article/program/Java/gj/201311/27510

相关参考

知识大全 java线程简介(线程的生命)

  创建线程      在Java程序中创建线程有几种方法每个Java程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的    Java线程可以通过直接

知识大全 java 多线程 完全版

  尽管线程对象的常用方法可以通过API文档来了解但是有很多方法仅仅从API说明是无法详细了解的我们先来说一下线程对象的几个重要的方法   首先我们来说明start()方

知识大全 JAVA对象转为Java String的几种常用方法

JAVA对象转为JavaString的几种常用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java里设置session的几种方式

Java里设置session的几种方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于ses

知识大全 java排序的几种方法

   //冒泡排序法(大的数往后放)      classBubble   &n

知识大全 将Java程序作成exe文件的几种方法

将Java程序作成exe文件的几种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一exej

知识大全 Java中单例模式的几种正确实现方法

Java中单例模式的几种正确实现方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第一种同步 

知识大全 Java中去除字符串中所有空格的几种方法

Java中去除字符串中所有空格的几种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA

知识大全 将Java应用程序本地编译为EXE的几种方法

将Java应用程序本地编译为EXE的几种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从获

知识大全 Java项目中连接数据库的几种方式和范例

Java项目中连接数据库的几种方式和范例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最原始的