热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java多线程线程的状态和操作系统中进程状态的对应关系

一java中的线程操作系统的进程五个状态:新建,就绪,运行,等待,结束线程一共有六种状态TERMINATED结

一 java中的线程

操作系统的进程五个状态:新建,就绪,运行,等待,结束

线程一共有六种状态

TERMINATED   结束 包括正常结束和异常结束
NEW                  新建状态 也就是对象创建了,但还没执行start方法

BLOCKED         锁池状态(也有说是阻塞状态) 等待的一种,特指等着获得锁,也就是被堵在syn方法外面。被挂到锁对象的阻塞队列上了

WAITING          等待事件发生,常常使用wait()方法 进入此状态,挂到锁对象的等待队列上。。
TIMED_WAITING  跟等待状态差不多,只不过时间到了,就进入可运行状态了(但是随之就有可能因为没抢到锁,到锁池状态)

      以上三个状态个人认为都是操作系统中的 等待(阻塞)状态
 
RUNNABLE     可运行状态   是操作系统中就绪状态和运行状态

 

这里有个待研究的点是 使用文件输入流读入一个大文件,我测试是超时等待状态。预想该是一种等待状态。。待解决

 

总结: java线程把就绪和运行合为一个状态---可运行;同时把等待分成三个状态 等待 ,阻塞(锁池) ,定时等待

 

二 demo 

以下的这一段代码可以更好的体现   这几种状态 当然0,1,2,3的顺序可能不一致,看调度结果

public class Main {private static int i = 0;static class MyThread extends Thread{@Overridepublic void run() {try {get();} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) throws InterruptedException {Thread[] arr = new Thread[10];arr[0] = new MyThread();arr[1] = new MyThread();arr[2] = new MyThread();arr[3] = new MyThread();arr[4] = new MyThread();arr[0].start();arr[1].start();arr[2].start();arr[3].start();Thread.currentThread().sleep(1000); //主线程等一下 让四个子线程先执行System.out.println(arr[0].getState()); //BLOCKED 第四名 没抢到锁 锁池状态System.out.println(arr[1].getState()); //WAITING 第一名 抢到锁 进入等待状态System.out.println(arr[2].getState()); // TIMED_WAITING 第三名 进入定时等待状态System.out.println(arr[3].getState()); //TERMINATED 第二名 直接return 结束System.out.println(arr[4].getState()); //还没startSystem.out.println(Thread.currentThread().getState()); // 主线程 运行状态}public static synchronized void get() throws InterruptedException {i++;if(i==1)Main.class.wait(); //第一次进入 等待if(i==2)return; //第二次进入 直接返回Thread.currentThread().sleep(1000*5); // 第三次进入超时等待}}

  

 

 

转:https://www.cnblogs.com/caijiwdq/p/11164218.html



推荐阅读
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
author-avatar
手机用户2602930391
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有