线程的状态

线程对象在不同的运行时期有不同的状态,状态信息就存在与State枚举类中。

验证New,Runnable,Terminated

new:线程实例化后还从未执行start()方法时的状态

runnable:线程进入运行的状态

terminated:线程被销毁时的状态

  1. package Seven;
  2.  
  3. public class MyThread extends Thread {
  4.  
  5. public MyThread() {
  6. System.out.println("构造方法中的状态:" + Thread.currentThread().getState());
  7. }
  8.  
  9. @Override
  10. public void run() {
  11. System.out.println("run方法中的状态:" + Thread.currentThread().getState());
  12. }
  13. }
  1. package Seven;
  2.  
  3. public class Run {
  4.  
  5. // NEW,
  6. // RUNNABLE,
  7. // TERMINATED,
  8.  
  9. // BLOCKED,
  10. // WAITING,
  11. // TIMED_WAITING,
  12.  
  13. public static void main(String[] args) {
  14. try {
  15. MyThread t = new MyThread();
  16. System.out.println("main方法中的状态1:" + t.getState());
  17. Thread.sleep(1000);
  18. t.start();
  19. Thread.sleep(1000);
  20. System.out.println("main方法中的状态2:" + t.getState());
  21. } catch (InterruptedException e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25.  
  26. }
  27.  
  28. }

注意:构造方法中的日志时main主线程的

验证Time_waiting

Time_waiting:线程执行了Thread.sleep()

  1. package Seven;
  2.  
  3. public class MyThread extends Thread {
  4.  
  5. @Override
  6. public void run() {
  7. try {
  8. System.out.println("begin sleep");
  9. Thread.sleep(10000);
  10. System.out.println(" end sleep");
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  1. package Seven;
  2.  
  3. public class Run {
  4. // NEW,
  5. // RUNNABLE,
  6. // TERMINATED,
  7.  
  8. // BLOCKED,
  9. // WAITING,
  10. // TIMED_WAITING,
  11.  
  12. public static void main(String[] args) {
  13. try {
  14. MyThread t = new MyThread();
  15. t.start();
  16. Thread.sleep(1000);
  17. System.out.println("main方法中的状态:" + t.getState());
  18. } catch (InterruptedException e) {
  19. // TODO Auto-generated catch block
  20. e.printStackTrace();
  21. }
  22.  
  23. }
  24. }

验证Blocked

blocked:出现在某一个线程等待锁的时候

  1. package Seven;
  2.  
  3. public class MyService {
  4. synchronized static public void serviceMethod() {
  5. try {
  6. System.out.println(Thread.currentThread().getName() + "进入了业务方法!");
  7. Thread.sleep(10000);
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12.  
  13. }
  1. package Seven;
  2.  
  3. public class MyThread1 extends Thread {
  4.  
  5. @Override
  6. public void run() {
  7. MyService.serviceMethod();
  8. }
  9.  
  10. }
  1. package Seven;
  2.  
  3. public class MyThread2 extends Thread {
  4.  
  5. @Override
  6. public void run() {
  7. MyService.serviceMethod();
  8. }
  9.  
  10. }
  1. package Seven;
  2.  
  3. public class Run {
  4. // NEW,
  5. // RUNNABLE,
  6. // TERMINATED,
  7. // BLOCKED,
  8. // WAITING,
  9. // TIMED_WAITING,
  10.  
  11. public static void main(String[] args) throws InterruptedException {
  12. MyThread1 t1 = new MyThread1();
  13. t1.setName("a");
  14. t1.start();
  15. MyThread2 t2 = new MyThread2();
  16. t2.setName("b");
  17. t2.start();
  18. //Thread.sleep(1000);
  19. System.out.println("main方法中的t2状态:" + t2.getState());
  20.  
  21. }
  22. }

验证waiting

waiting:是线程执行了object.wait()方法后所处的状态

  1. package Seven;
  2.  
  3. public class Lock {
  4.  
  5. public static final Byte lock = new Byte("0");
  6.  
  7. }
  1. package Seven;
  2.  
  3. public class MyThread extends Thread {
  4.  
  5. @Override
  6. public void run() {
  7. try {
  8. synchronized (Lock.lock) {
  9. Lock.lock.wait();
  10. }
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  1. package Seven;
  2.  
  3. public class Run {
  4. // NEW,
  5. // RUNNABLE,
  6. // TERMINATED,
  7. // BLOCKED,
  8. // WAITING,
  9. // TIMED_WAITING,
  10.  
  11. public static void main(String[] args) {
  12. try {
  13. MyThread t = new MyThread();
  14. t.start();
  15. Thread.sleep(1000);
  16. System.out.println("main方法中的t状态:" + t.getState());
  17. } catch (InterruptedException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21.  
  22. }
  23. }

《Java多线程编程核心技术》读后感(十五)的更多相关文章

  1. Java多线程编程核心技术,第五章

    1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...

  2. Java多线程编程核心技术(三)多线程通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  3. Java多线程编程核心技术(二)对象及变量的并发访问

    本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...

  4. Java多线程编程核心技术(一)Java多线程技能

    1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...

  5. 《Java多线程编程核心技术》知识梳理

    <Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...

  6. Java多线程编程核心技术---学习分享

    继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...

  7. Java多线程编程核心技术---对象及变量的并发访问(二)

    数据类型String的常量池特性 在JVM中具有String常量池缓存的功能. public class Service { public static void print(String str){ ...

  8. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  9. 《Java多线程编程核心技术》推荐

    写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...

  10. 《java多线程编程核心技术》(一)使用多线程

    了解多线程 进程和多线程的概念和线程的优点: 提及多线程技术,不得不提及"进程"这个概念.百度百科对"进程"的解释如下: 进程(Process)是计算机中的程序 ...

随机推荐

  1. 网卡配置bond

    在实际的生产环境中,服务器都需要配置bond环境的,以提高安全性及均衡能力.我公司网卡配置的是mode=1 类型,mode=1 是主备模式,当其中一块网卡不能工作时,另一块网卡立即代替.以下是mode ...

  2. 如何进行Web服务的性能测试?

    随着浏览器功能的不断完善,用户量不断的攀升,涉及到web服务的功能在不断的增加,对于我们测试来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求.那么性能测试都要做些什么呢?我 ...

  3. 聚聚科技——php开发笔试题及答案

    聚聚科技是一个刚创立的公司,很小很小,人很少,老板感觉是个典型的北京小伙儿,戾气很重,很有个性.笔试题倒是简单: 1. echo(), print(), print_r()的区别? echo是PHP语 ...

  4. Wix Burn:如何将32位和64位的安装包制作成一个安装包

    由于Windows Installer不是平台独立的(即区分32-bit和64-bit),因此用Wix制作的安装包在编译不能像.net应用那样采用Any CPU编译,而必须制定是目标Platform是 ...

  5. REST、DRF(View源码解读、APIView源码解读)

    一 . REST            前言 1 . 编程 : 数据结构和算法的结合 .小程序如简单的计算器,我们输入初始数据,经过计算,得到最终的数据,这个过程中,初始数据和结果数据都是数据,而计算 ...

  6. 《高性能Javascript》 Summary(二)

    第四章.算法和流程控制 Algorithms And Flow Control 原因:代码整体结构是执行速度的决定因素之一.代码量少不一定运行速度快,代码量多不一定运行速度慢.性能损失与组织代码和具体 ...

  7. 编辑框的WM_MOUSELEAVE和WM_MOUSEHOVER使用

    // 参考资料 // http://www.cnblogs.com/weiqubo/archive/2011/04/14/2016323.html 最近工作需要,需要自定义编辑框,改写编辑框CEdit ...

  8. Windows Server 2008 MS Office 操作 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。

    Make sure that you have Office runtime installed on the server. If you are using Windows Server 2008 ...

  9. Ubuntu apt-get update 失败【转】

    本文转载自:http://www.jianshu.com/p/0de2b5717ce8 1 $ sudo apt-get update 报了一堆错误: Err http://cn.archive.ub ...

  10. zabbix性能优化等

    摘自: http://blog.sina.com.cn/s/blog_4cbf97060101fcfw.html 非常好的一篇,值得有用