知识大全 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程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的 Java线程可以通过直接
尽管线程对象的常用方法可以通过API文档来了解但是有很多方法仅仅从API说明是无法详细了解的我们先来说一下线程对象的几个重要的方法 首先我们来说明start()方
知识大全 JAVA对象转为Java String的几种常用方法
JAVA对象转为JavaString的几种常用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java里设置session的几种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于ses
//冒泡排序法(大的数往后放) classBubble &n
将Java程序作成exe文件的几种方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一exej
Java中单例模式的几种正确实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第一种同步
Java中去除字符串中所有空格的几种方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JAVA
将Java应用程序本地编译为EXE的几种方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 从获
Java项目中连接数据库的几种方式和范例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最原始的