首页 > 其他分享 >线程状态&线程控制

线程状态&线程控制

时间:2024-01-26 17:48:03浏览次数:26  
标签:状态 调用 控制 阻塞 线程 监视器 就绪

线程状态

 

新建状态

new Thread() 后 该线程处于新建状态,与其他Java对象一样,未表现出线程的特征;

 

就绪状态

当 Thread的对象 调用了 start方法后,该线程处于 就绪状态;

JVM会为当前线程创建 运行时环境(虚拟机栈、程序计数器);

处于 就绪状态的线程 并未开始执行,需要等待CPU的调度;

 

运行状态

处于就绪状态的线程 获得CPU后,开始执行run方法,此时该线程处于 运行状态;

 

阻塞状态

如下情况,处于运行状态的线程将进入阻塞状态:

  线程 主动调用 sleep方法,放弃CPU资源;

  线程 调用了阻塞IO的方法,在方法返回之前,将被阻塞;

  线程 试图获取同步监视器,但 该同步监视器被其他线程持有

  线程 等待某个通知(notify);  

  线程 主动调用suspend,将线程挂起(容易导致死锁);

 

如下情况,处于阻塞状态的线程重新进入就绪状态:

  sleep方法超过了时间;

  调用的阻塞IO方法返回;

  成功取得同步监视器;

  等待某个通知,其他线程发出了通知;

  处于挂起状态的线程 被 调用了resume;

 

死亡状态

如下情况,进入死亡状态:

  run方法执行结束;

  线程抛出一个Exception或Error;

  直接调用stop方法(容易死锁);

 

判断某个线程是否死亡,使用isAlive

  处于 就绪&运行&阻塞 状态时,返回true;

  处于 新建&死亡 状态时,返回false;

 

 

线程控制

join

让一个线程 等待 另一个线程完成;

在当前线程中 调用 其他线程的join,当前线程将一直被阻塞,直到被加入的线程执行完成;

 

sleep

在当前线程中 调用 sleep,当前线程将被一直阻塞,直到过了sleep时间;

 

yield

Thread的static方法,让当前正在执行的线程 暂停 但 不会阻塞(进入就绪状态);

当调用了Thread的yield方法后,只有 与当前线程同等优先级 或 大于当前线程优先级的线程 才有抢占CPU资源的机会;

 

线程的协调运行

Object的Wait()&Notify()&NotifyAll()

这3个方法 必须由 同步监视器 调用

 

wait():

  导致 当前线程等待,直到 其他线程调用该同步监视器的notify()/notifyAll() ;

notify():

  唤醒 在此同步监视器上 等待的单个线程(如果有多个,随机唤醒一个);

notifyAll():

  唤醒 在此同步监视器上 等待的所有线程

 

标签:状态,调用,控制,阻塞,线程,监视器,就绪
From: https://www.cnblogs.com/anpeiyong/p/17989877

相关文章

  • Python 多线程的局限性及适用场景解析
     Python是一门功能强大且广泛应用的编程语言,然而在使用多线程方面,它存在一些局限性。本文将探讨Python多线程的局限性,并分析其适用场景,帮助读者更好地理解Python多线程的实际运用。 正文: 一、Python的全局解释器锁(GIL) Python的全局解释器锁(GlobalInterpreterLock,简称GIL)是P......
  • 数据库安全||数据库安全性控制的方法及其实例(用户身份识别、存取控制、视图、审计、数
    数据库安全性控制是确保数据库系统中的数据不被非法访问、修改或破坏的一系列技术和策略。以下是数据库安全性控制的详细介绍:用户身份鉴别:静态口令鉴别:用户设置一个固定的密码,每次登录时使用相同的密码。动态口令鉴别:每次登录时生成一个新的密码,通常与时间或事件相关联,提高了安全性......
  • Visual Studio 2019 SSIS工具控制流增加约束以及数据流增加数据匹配达到增量抽取
    情况1:在配置控制流时,想在数据流前面进行数据的过滤或者是前置的数据记录数的判断,那可以在数据流前面增加SQL执行任务用来放置判断SQL语句,随后得在SQL执行任务编辑界面找到ResultSet(结果集),在右侧下拉选择项中选择单行(这里选择单行是因为写的SQL判断语句只输出一行值)随后在左侧菜......
  • 【生产制造专栏】紧固件成本分析及控制规则
    随着高端装备制造业的快速发展,对技术创新的需求也是迫在眉睫,作为企业技术创新和科技成果转化重要载体的工艺技术,一直是企业核心竞争力的重要体现。 工艺是否科学合理,直接决定了产品的质量、成本和制造效率,《中国制造2025》明确提出了“建立基础工艺创新体系,开展先进成型、加工......
  • 如何实现高精度无线同步控制矿山爆破?
        随着现代社会工业化进程的不断加快,人们对于矿山开采的规模和速度要求越来越高。为了快速推进矿山的开采作业,人们对于炸yao威力的要求越来越高。    考虑到生产、运输和存储等各个方面的安全性以及国家有关方面的强制要求,雷管的火药填装量是有严格限制的,不允许......
  • ETL能实现什么流程控制方式?
    随着大数据时代的到来,数据处理工具成为各个行业中不可或缺的一部分。运用数据处理工具,能够大幅度帮助开发人员进行数据处理等工作,以及能够更好的为企业创造出有价值的数据。那在使用ETL工具时,我们往往会通过ETL平台所携带的组件去进行配置,那我们可以通过ETL实现什么样的流程控制方......
  • ETL能实现什么流程控制方式?
    随着大数据时代的到来,数据处理工具成为各个行业中不可或缺的一部分。运用数据处理工具,能够大幅度帮助开发人员进行数据处理等工作,以及能够更好的为企业创造出有价值的数据。那在使用ETL工具时,我们往往会通过ETL平台所携带的组件去进行配置,那我们可以通过ETL实现什么样的流程控制方......
  • .net 高并发(二,多线程)
    一,多线程可以通过System.Threading.Thread类来实现。下面是一个简单的示例,展示如何使用Thread类创建和管理多个线程: usingSystem; usingSystem.Threading;   classProgram { staticvoidMain() { //创建两个线程 Thre......
  • 专业远程控制软件有哪些
    远程办公、远程控制类的软件很多,主打方向和面向的客户人群也不一样。个人用户可能更在意便捷、免费等因素;专业用户会更注重安全性、管理功能等。今天我们介绍几个在全球知名的专业商业远程软件。1、TeamViewer简介:TeamViewer在全球范围内广泛使用,包括在中国。它为企业提供可靠......
  • 线程池
    线程的生命周期线程的创建时间、线程的执行时间、线程的销毁时间线程三大主要开销Java的线程模型是基于操作系统原生线程模型实现的,即是基于内核线程实现的;线程的创建,析构与同步都需要进行系统调用,在用户态和内核态切换开销大;每个线程都需要一个内核线程的支持,也就会消耗一......