热门标签 | 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 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • WebStorm 是一款强大的集成开发环境,支持多种现代 Web 开发技术,包括 Node.js、CoffeeScript、TypeScript、Dart、Jade、Sass、LESS 和 Stylus。它为开发者提供了丰富的功能和工具,帮助高效构建和调试复杂的 Node.js 应用程序。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
  • JDK 1.8引入了多项并发新特性,显著提升了编程效率。本文重点探讨了LongAdder和StampedLock的特性和应用场景。此外,还介绍了在多线程环境中发生死锁时,如何通过jps命令进行诊断和排查,提供了详细的步骤和示例。这些改进不仅增强了系统的性能,还简化了开发者的调试工作。 ... [详细]
  • 面向对象编程的核心概念包括类与对象、封装技术、继承机制、多线程处理及线程同步、异常管理。类是现实世界对象的抽象表示,包含属性(特征)和方法(行为)。对象则是类的具体实例,用于实现抽象数据类型。通过封装技术,可以隐藏对象的内部细节,保护数据的安全性。继承机制允许子类继承父类的属性和方法,提高代码的复用性和可维护性。多线程处理和线程同步技术则用于实现并发操作,提升程序的执行效率。异常管理机制则确保程序在遇到错误时能够优雅地处理,提高系统的健壮性。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 深入解析Netty:基础理论与IO模型概述
    深入解析Netty:基础理论与IO模型概述 ... [详细]
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社区 版权所有