- 浏览: 576379 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (237)
- Java (48)
- Flex3 (43)
- Spring (7)
- Hibernate (7)
- 杂文 (2)
- 设计模式 (3)
- 数据库相关 (32)
- Eclipse开发环境 (10)
- C/C++ (1)
- 随笔 (1)
- 生活点滴 (2)
- Flex4 (3)
- Oracle (6)
- SQLServer (6)
- Degrafa (1)
- ActionScript (2)
- JavaScript (11)
- MySQL (8)
- 开源项目 (4)
- AspectJ (0)
- Spring Security (1)
- SSO (0)
- PV3D (2)
- JBPM (1)
- JBoss (0)
- Tomcat (5)
- Struts (1)
- WebService (2)
- 算法 (1)
- 数据结构 (1)
- POI (2)
- Lucene (2)
- 其他 (3)
- Blazeds (2)
- Alternative 3D (0)
- Ibatis (3)
- Intellij (3)
- freemaker (0)
- Maven (5)
- web (4)
- Eclipse (1)
- velocity (1)
- Linux (7)
- CXF (3)
- html (2)
- JVM (1)
最新评论
-
jpsb:
多谢楼主,问题解决,主要就是svn版本不同导致的
Eclipse 导入本地svn项目的问题 -
yycdaizi:
lanmolsz 写道无法同意楼主的说法,楼主所谓的晚捕捉就是 ...
Java异常处理原则 -
lanmolsz:
无法同意楼主的说法,楼主所谓的晚捕捉就是典型的让异常控制程序的 ...
Java异常处理原则 -
cici_new_1987:
...
Java异常处理原则 -
雁行:
倒是怀疑这个功能来着
Eclipse 导入本地svn项目的问题
一个线程创建之后,总是处于其生命周期的4个状态之一中。线程的状态表明此线 程当前正在进行的活动,而线程的状态是可以通过程序来进行控制的,就是说,可以对线程 进行操作来改变状态。这些操作包括启动(start)、终止(stop)、睡眠(sleep)、挂起 (suspend)、恢复(resume)、等待(wait)和通知(notify)。每一个操作都对应了一个方法,这些 方法是由软件包java.lang提供的。
①创建(new)状态
如果创建了一个线程而没有启动它,那么,此线程就处于创建状态。比如,下述语句执行 以后,使系统有了一个处于创建状态的线程myThread:
Thread myThread= new MyThreadClass();
其中,MyThreadClass()是Thread的子类,而Thread是由Java系统的java.lang软件包提 供的。
处于创建状态的线程还没有获得应有的资源,所以,这是一个空的线程。线程只有通过 启动后,系统才会为它分配资源。对处于创建状态的线程可以进行两种操作:一是启动 (start)操作,使其进入可运行状态,二是终止(stop)操作,使其进入消亡状态。如果进入到消 亡状态,那么,此后这个线程就不能进入其他状态,也就是说,它不再存在了。
start方法是对应启动操作的方法,其具体功能是为线程分配必要的系统资源;将线程 设置为可运行状态,从而可以使系统调度这个线程。
②可运行(runnable)状态
如果对一个处于创建状态的线程进行启动操作,则此线程便进入可运行状态。仍以前面 创建的myThread线程为例,用下列语句: myThread.start(); 则线程myThread进入可运行状态。上述语句实质上是调用了线程体即run()方法。注意, run()方法包含在myThread线程中,也就是先由java.lang包的Thread类将run()方法 传递给子类MyThreadClass(),再通过创建线程由于类MyThreadClass()传递给线程 myThread。
线程处于可运行状态只说明它具备了运行条件,但可运行状态并不一定是运行状态。因 为在单处理器系统中运行多线程程序,实际上在一个时间点只有一个线程在运行,而系统中 往往有多个线程同时处于可运行状态。系统通过快速切换和调度使所有可运行线程共享处 理器,造成宏观上的多线程并发运行。
可见,一个线程是否处于运行状态,除了必须处于可运行状态外,还取决于系统的调度。
在可运行状态可以进行多种操作,最通常的是从run()方法正常退出而使线程结束,进 入消亡状态。此外,还可以有如下操作:
挂起操作,通过调用suspend方法来实现;
睡眠操作,通过调用sleep方法来实现;
等待操作,通过调用wait方法来实现;
退让操作,通过调用yield方法来实现;
终止操作,通过调用stop方法来实现。
前面三种操作都会使一个处于可运行状态的线程进入不可运行状态。比如,仍以 myThread线程为例,当其处于可运行状态后,再用如下语句:
myThreadsleep(5000);
则调用sleep方法使myThread线程睡眠5秒(5000毫秒)。这5秒内,此线程不能被系统调 度运行,只有过5秒后,myThread线程才会醒来并自动回到可运行状态。
如果一个线程被执行挂起操作而转到不可运行状态,则必须通过调用恢复(resume)操 作,才能使这个线程再回到可运行状态。
退让操作是使某个线程把CPU控制权提前转交给同级优先权的其他线程。
对可运行状态的线程也可以通过调用stop方法使其进入消亡状态。
③不可运行(not runnable)状态
不可运行状态都是由可运行状态转变来的。一个处于可运行状态的线程,如果遇到挂起 (suspend)操作、睡眠(sleep)操作或者等待(wait)操作,就会进入不可运行状态。另外,如果 一个线程是和I/O操作有关的,那么,在执行I/O指令时,由于外设速度远远低于处理器速 度而使线程受到阻塞,从而进入不可运行状态,只有外设完成输入/输出之后,该线程才会自 动回到可运行状态。线程进入不可运行状态后,还可以再回到可运行状态。通常有三种途径 使其恢复到可运行状态。
一是自动恢复。
通过睡眠(sleep)操作而进入不可运行状态的线程会在过了指定睡眠时间以后自动恢 复到可运行状态;由于I/O阻塞而进入不可运行状态的线程在外设完成I/O操作后,自动 恢复到可运行状态。
二是用恢复(resume)方法使其恢复。
如果一个线程由于挂起(suspend)操作而从可运行状态进入不可运行状态,那么,必须 用恢复(resume)操作使其再恢复到可运行状态。
三是用通知(notify或notiyA11)方法使其恢复。
如果一个处于可运行状态的线程由于等待(wait)操作面转入不可运行状态,那么,必须 通过调用notify方法或notifyAll方法才能使其恢复到可运行状态。采用等待操作往往是由 于线程需要等待某个条件变量,当获得此条件变量后,便可由notify或notifyAll方法使线 程恢复到可运行状态。
恢复到可运行状态的每一种途径都是有针对性的,不能交叉。比如,对由于阻塞而进入 不可运行状态的线程采用恢复操作将是无效的。
在不可运行状态,也可由终止(stop)操作使其进入消亡状态。
④消亡(dead)状态
一个线程可以由其他任何一个状态通过终止(stop)操作而进入消亡状态。线程一旦进 入消亡状态,那它就不再存在,所以也不可能再转到其他状态。
通常,在一个应用程序运行时,如果通过其他外部命令终止当前应用程序,那么就会调 用stop方法终止线程。但是,最正常、最常见的途径是由于线程在可运行状态正常完成自身 的任务而“寿终正寝”,从而进入消亡状态,这个完成任务的动作是由run方法实现的。
转载自:http://hi.baidu.com/jsoftware/blog/item/4a909424335160044d088d0b.html
发表评论
-
【转载】8张图理解Java
2015-12-23 13:44 851一图胜千言,下面图解均来自Program Creek 网站 ... -
【转载】JAVA多线程与并发学习总结
2015-12-17 13:23 968本文转载自:http://www.cnblogs.co ... -
关于MAT分析工具中的Shallow heap & Retained heap
2015-11-26 10:58 1383本文转载自:http://bjyzxxds.iteye.c ... -
触发JVM进行Full GC的情况及应对策略
2015-11-10 14:10 3198转载自:http://blog.csdn.net/chen ... -
JVM内存参数详解以及配置调优
2015-10-26 20:21 879本文转载自:http://www ... -
[转载]在线数据迁移经验:如何为正在飞行的飞机更换引擎
2015-02-25 15:49 914转载自:http://www.infoq.c ... -
java.lang.OutOfMemoryError: unable to create new native thread问题诊断
2014-10-27 18:34 614转载自:http://www.blogjava.net/l ... -
JVM调优总结 -Xms -Xmx -Xmn -Xss
2014-10-14 09:28 819本文转载自:http://unixboy.iteye.co ... -
JVM参数分析
2014-01-26 19:54 1156转载自: http:// ... -
Java的getByte()方法解析
2014-01-17 13:28 1498转载自: http://bijian1013. ... -
httpClient处理乱码
2014-01-10 12:08 795利用HttpClient模拟Http请求访问页面 ... -
Tomcat 生产服务器性能优化
2013-11-13 19:45 895转载自:http://www.oschina.net/tra ... -
JVM内存配置
2013-07-11 09:34 1284原文地址:http://vanadiu ... -
Jackson序列化和反序列化
2013-04-29 16:29 2242Jackson使用备忘 Jackson主要使用 ... -
Mysql连接异常
2013-04-29 15:47 1105在连接Mysql数据库后,查询时报错: The l ... -
浅谈SQL Server中的快照
2012-12-31 09:32 1204简介 数据库快照,正如其名称所示那样,是数据库在 ... -
使用IBM heapAnalyzer分析heap dump文件步骤
2012-12-18 21:38 298781. ... -
Spring防止重复ID命名
2012-08-17 16:34 12071、同一个spring配置文件不允许重复ID,这个不需要 ... -
Java异常处理原则
2012-02-21 16:36 8784关于异常处理的一篇文章 异常处理机制 ... -
Intellij常用快捷键收集
2012-01-04 15:22 1103Alt+回车 导入包,自动修正 Ctrl+N 查 ...
相关推荐
Java 线程状态转换图 Java 线程状态转换图是 Java 编程中非常重要的一个概念,它描述了线程在不同的状态之间的转换关系。了解线程状态转换图对 Java 编程的理解和应用非常重要。本文将详细介绍 Java 线程状态转换图...
Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换规则。 NEW(初始化状态) 在Java...
### Java线程:线程状态的转换 #### 一、线程状态及其转换 ...通过以上分析,我们可以看到Java线程状态转换的基本原理以及如何利用线程状态来控制线程的行为,这对于开发高性能、高可靠性的并发程序至关重要。
Java线程有五种基本状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。了解这些状态有助于理解和调试多线程程序。 五、线程调度 1. 非抢占式调度:线程按照它们被创建...
线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种状态: 1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,...
3. **多线程**:Java提供了丰富的多线程支持,包括Thread类和Runnable接口。理解线程的生命周期、同步机制(如synchronized关键字、volatile变量、Lock接口)以及死锁、活锁和饥饿状态,是编写高效并发程序的基础。 ...
在Java中,线程的状态及其转换是非常关键的概念,理解和掌握这些可以帮助我们编写出更加高效、稳定的多线程程序。本教程将深入探讨Java线程的五种基本状态以及它们之间的转换。 1. **新建(New)**:当使用`Thread`...
- **线程创建方式**:继承 Thread 类、实现 Runnable 接口。 - **同步机制**:synchronized 关键字、ReentrantLock 等。 - **并发工具类**:如 ExecutorService、Semaphore 等。 - **线程安全问题**:避免共享可变...
可执行状态是指其他线程调用了处于新建状态线程的start方法,该线程对象将转换到“可执行状态”。运行状态是指处在“可执行状态”的线程对象一旦获得了 CPU 控制权,就会转换到“执行状态”。阻塞状态是指线程在...
- **线程生命期**:了解线程的状态转换和生命周期管理。 - **共享数据访问**:掌握解决数据竞争的方法。 - **同步机制**:熟悉各种同步工具和技术。 - **高级API**:了解额外的线程API细节。 **进一步学习资源:** ...
- **线程状态**:理解新建、就绪、运行、阻塞和死亡等线程状态。 8. **反射** - 反射机制允许在运行时动态地获取类的信息并操作类的对象,常用于插件系统、序列化和框架开发。 9. **泛型** - 泛型提高了代码的...
键字)用于声明变量、方法或类,表示不可变或最终状态。在类定义中,`final`修饰的类不能被继承;对于方法,`final`意味着该方法不能被重写;对于变量,`final`则表示一旦赋值后就不能再改变。 finally是异常处理的...
Java的线程状态转换是理解多线程行为的关键。线程有五种基本状态:新建、就绪、运行、阻塞和终止。线程通过start()方法从新建变为就绪状态,然后由JVM调度进入运行状态。当线程执行阻塞操作(如等待锁、IO操作)时,...
理解线程的生命周期、状态转换(新建、就绪、运行、阻塞、死亡)以及线程池的概念也是至关重要的。 总之,理解和掌握Java线程挂起是提升多线程编程技能的关键。通过实践和不断学习,你将成为一个熟练的Java并发...
Java的File类和FileInputStream/FileOutputStream用于读写文件,而对象序列化(Serializable接口)可能是用来保存和加载写字板状态的。 6. **数据库存储**: 标签中提到了“数据库”,意味着可能使用了Java的JDBC...
Java中创建线程可以通过继承Thread类或实现Runnable接口,推荐使用后者。 2. **线程状态**: Java线程有多种状态,包括新建、就绪、运行、阻塞和死亡等状态。 3. **守护线程**: 守护线程是为其他线程服务的...
- 线程状态:理解新生、就绪、运行、阻塞和死亡五种线程状态。 - 线程同步:synchronized关键字,wait(), notify(), notifyAll()方法,以及Lock接口的使用。 - 守护线程与线程池:理解守护线程的概念,以及...
Java线程状态转换是Java多线程编程中的关键概念,对于理解和优化并发程序至关重要。Java线程在其生命周期中经历多种状态,这些状态之间的转换是由线程调度器根据特定的策略来决定的。以下是对Java线程状态转换的详细...
4. **线程状态**:线程有哪些状态,如何在这些状态之间转换? 5. **线程池**:ExecutorService、ThreadPoolExecutor和ScheduledThreadPoolExecutor的作用,以及如何配置和使用线程池。 6. **并发容器**:...
1. **多线程**:Java提供了强大的并发处理能力,通过Thread类和Runnable接口实现。项目可能涉及到线程的创建、同步、协作以及线程池的使用,如ExecutorService和ThreadPoolExecutor。在嗖嗖移动业务大厅中,可能需要...