Thread类中State枚举定义:

  1. public enum State {
  2. /**
  3. * Thread state for a thread which has not yet started.
  4. */
  5. NEW,
  6.  
  7. /**
  8. * Thread state for a runnable thread. A thread in the runnable
  9. * state is executing in the Java virtual machine but it may
  10. * be waiting for other resources from the operating system
  11. * such as processor.
  12. */
  13. RUNNABLE,
  14.  
  15. /**
  16. * Thread state for a thread blocked waiting for a monitor lock.
  17. * A thread in the blocked state is waiting for a monitor lock
  18. * to enter a synchronized block/method or
  19. * reenter a synchronized block/method after calling
  20. * {@link Object#wait() Object.wait}.
  21. */
  22. BLOCKED,
  23.  
  24. /**
  25. * Thread state for a waiting thread.
  26. * A thread is in the waiting state due to calling one of the
  27. * following methods:
  28. * <ul>
  29. * <li>{@link Object#wait() Object.wait} with no timeout</li>
  30. * <li>{@link #join() Thread.join} with no timeout</li>
  31. * <li>{@link LockSupport#park() LockSupport.park}</li>
  32. * </ul>
  33. *
  34. * <p>A thread in the waiting state is waiting for another thread to
  35. * perform a particular action.
  36. *
  37. * For example, a thread that has called <tt>Object.wait()</tt>
  38. * on an object is waiting for another thread to call
  39. * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
  40. * that object. A thread that has called <tt>Thread.join()</tt>
  41. * is waiting for a specified thread to terminate.
  42. */
  43. WAITING,
  44.  
  45. /**
  46. * Thread state for a waiting thread with a specified waiting time.
  47. * A thread is in the timed waiting state due to calling one of
  48. * the following methods with a specified positive waiting time:
  49. * <ul>
  50. * <li>{@link #sleep Thread.sleep}</li>
  51. * <li>{@link Object#wait(long) Object.wait} with timeout</li>
  52. * <li>{@link #join(long) Thread.join} with timeout</li>
  53. * <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
  54. * <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
  55. * </ul>
  56. */
  57. TIMED_WAITING,
  58.  
  59. /**
  60. * Thread state for a terminated thread.
  61. * The thread has completed execution.
  62. */
  63. TERMINATED;
  64. }

  

  • sleep(long)
  1. public class MyThread implements Runnable {
  2. @Override
  3. public void run() {
  4. System.out.println(Thread.currentThread().getName()+"========="+Thread.currentThread().getState());
  5. try {
  6. Thread.sleep(10000L);
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }

  测试i类:

  1. public class ThreadTest {
  2. public static void main(String[] args) throws InterruptedException {
  3. Thread t=new Thread(new MyThread());
  4. t.start();
  5. Thread.sleep(1000L);
  6. System.out.println(t.getName()+">>>>>>>"+t.getState());
  7.  
  8. }
  9. }

运行结果:

  1. Thread-0=========RUNNABLE
  2. Thread-0>>>>>>>TIMED_WAITING
  3.  
  4. Process finished with exit code 0
  • join()
  1. public class MyThread implements Runnable {
  2. private Thread parent;
  3.  
  4. public MyThread(Thread thread) {
  5. parent = thread;
  6. }
  7.  
  8. @Override
  9. public void run() {
  10. System.out.println(Thread.currentThread().getName() + "=========" + Thread.currentThread().getState());
  11. long startTime = System.currentTimeMillis();
  12. while ((System.currentTimeMillis() - startTime) / 1000 <= 2) {
  13.  
  14. }
  15. System.out.println(parent.getName() + ">>>>" + parent.getState());
  16.  
  17. }
  18. }

测试代码:

  1. public class ThreadTest {
  2. public static void main(String[] args) throws InterruptedException {
  3. Thread t=new Thread(new MyThread(Thread.currentThread()));
  4. t.start();
  5. Thread.sleep(1000L);
  6. System.out.println(t.getName()+">>>>>>>"+t.getState());
  7. System.out.println(t.getName()+".join...");
  8. t.join();
  9. System.out.println(t.getName()+">>>>>>>"+t.getState());
  10. System.out.println(Thread.currentThread().getName()+">>>>>>>"+Thread.currentThread().getState());
  11. }
  12. }

运行结果:

  1. Thread-0=========RUNNABLE
  2. Thread-0>>>>>>>RUNNABLE
  3. Thread-0.join...
  4. main>>>>WAITING
  5. Thread-0>>>>>>>TERMINATED
  6. main>>>>>>>RUNNABLE
  • wait()
  1. public class TestService {
  2. private static Object lock=new Object();
  3. public void test() throws InterruptedException {
  4. synchronized (lock) {
  5. System.out.println(Thread.currentThread().getName() + ":" + Thread.currentThread().getState());
  6. lock.wait();
  7. }
  8. }
  9. }
  1. public class MyThread implements Runnable {
  2. private TestService testService;
  3.  
  4. public MyThread(TestService testService) {
  5. this.testService = testService;
  6. }
  7.  
  8. @Override
  9. public void run() {
  10. try {
  11. testService.test();
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. }
  15. }
  16. }

测试代码:

  1. public class ThreadTest {
  2. public static void main(String[] args) throws InterruptedException {
  3. Thread t=new Thread(new MyThread(new TestService()));
  4. t.start();
  5. Thread.sleep(1000L);
  6. System.out.println(t.getName()+":"+t.getState());
  7. }
  8. }

运行结果:

  1. Thread-0:RUNNABLE
  2. Thread-0:WAITING

JAVA 线程状态转换的更多相关文章

  1. Java线程状态转换

    前言:对于Java线程状态方面的知识点,笔者总感觉朦朦胧胧,趁着最近整理资料,将Java线程状态方面的知识点总结归纳,以便加深记忆. 1.Java线程状态值 在Thread类源码中通过枚举为线程定义了 ...

  2. 浅谈 Java线程状态转换及控制

    线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...

  3. 一文读懂Java线程状态转换

    前言 本文描述Java线程线程状态及状态转换,不会涉及过多理论,主要以代码示例说明线程状态如何转换. 基础知识 1. 线程状态 Thread源码中的状态说明: 线程可以有6种状态: New(新建) R ...

  4. JAVA 线程状态转换图示及说明

    线程状态类型 新建状态(New):新创建了一个线程对象. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取C ...

  5. Java中的线程状态转换和线程控制常用方法

    Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的 ...

  6. Java线程状态及 wait、sleep、join、interrupt、yield等的区别

    Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到  被中断.被拥有该对象锁的线程唤醒(notify或not ...

  7. Java线程状态和关闭线程的正确姿势

    1.线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释. public enum State { /** 表示一个线程还没启用(即未 ...

  8. Java线程状态Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释

    一.线程5种状态 新建状态(New) 新创建了一个线程对象. 就绪状态(Runnable) 线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获 ...

  9. 四十二、Linux 线程——线程同步之条件变量之线程状态转换

    42.1 线程状态转换 42.1.1 状态转换图 42.1.2 一个线程计算,多个线程获取的案例 #include <stdio.h> #include <stdlib.h> ...

随机推荐

  1. AssetBundle之LoadFromCacheOrDownload()取代"new WWW (url)的作用

    1.为了充分利用缓存功能.2.缓存的资源包完全由文件名和版本号唯一标识,URL所有域名和路径信息在缓存被忽略.3.由于缓存的资源包通过文件名而不是完整的URL来识别,在任何时候资源包被下载,你可以更改 ...

  2. mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)

    需求描述: mysql中,想要查看某个数据库的字符集.通过information_schma模式下的schemata表来查询 环境描述: mysql版本:5.7.21-log 操作过程: 1.查看in ...

  3. 超全面的JavaWeb笔记day07<Java基础加强>

    1.myeclipse安装和使用(**) 2.debug调试模式(**) - F6: 单步执行 - F8:结束断点,后面有断点到下一个断点 3.myeclipse快捷键(**) 4.junit单元测试 ...

  4. swift - 之 UICollectionView的用法/自定义流布局

    具体代码如下: 1.声明 var hCollectionView:UICollectionView? var layout:UICollectionViewFlowLayout? let course ...

  5. 【渗透测试学习平台】 web for pentester -4.目录遍历

    Example 1 http://192.168.106.154/dirtrav/example1.php?file=../../../../../../../etc/passwd Example 2 ...

  6. apache与weblogic 的整合

    web服务器与应用服务器的整合中,apache与weblogic 的整合算的上最普遍也是最基础的整合了 今天配置了一下: apache 2.0 weblogic 8.1 1.将weblogic中的mo ...

  7. iOS实现传递不定长的多个参数

    我们在使用苹果官方的文档的时候会发现可传不定数的参数例如: // [[UIAlertView alloc]initWithTitle:<#(nullable NSString *)#> m ...

  8. Delphi 单元

    单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用.一个单元至少要有unit语句,interface,和implementation三部分,也 ...

  9. Hibernate(1)——数据访问层的架构模式<转>

    数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设计目标 数据映射器架构模式 JDBC的缺点 Hibernate简介 迅速使用Hibernat ...

  10. 《转载》struts旅程《1》

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...