设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式

这篇具有很好参考价值的文章主要介绍了设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思考一下

  1. 在线程1中如何终止线程2?
  2. stop()?还是System.exit()?还是其他方式

方式解答

1.使用stop()不可取
线程对象的stop()方法会直接杀死线程,假设此时使用了线程锁,当此时使用了stop()命令会导致线程锁无法释放,以至于程序出现严重的问题,其中最常见的是死锁。还可能导致资源泄露,因为其他线程无法获取到被持有的资源。这可能会导致内存泄露或者其他资源的持续占用,最终导致系统资源耗尽。

什么是死锁?

死锁是指两个或多个线程相互持有对方所需的资源,导致它们都在等待对方释放资源,从而永远无法继续执行下去。当发生死锁时,程序可能会完全停止响应,或者表现出非常低的性能。在生产环境中,死锁可能导致程序崩溃或系统不稳定。

2.System.exit(int)不可取
System.exit(int)此方法是停止所有线程,此做法会使程序整个终止掉。

详细解释

  • 当调用System.exit(int) 时,JVM 将立即终止当前程序的执行,并返回一个整数状态码。通常情况下,返回值 0表示程序正常结束,非零值表示程序出现了某种异常或错误。这意味着可以根据System.exit(int) 返回值来判断程序的结束状态,并在必要时采取相应的措施。
  • 需要注意的是,调用System.exit(int)将立即终止程序的执行,因此任何在该方法调用之后的代码都将不会被执行。因此,需要小心使用该方法,避免在不必要的情况下过早地终止程序的执行。
  • 通常情况下,不建议在常规的程序流程中经常使用System.exit(int),除非在特定情况下需要强制结束程序的执行。更好的做法是通过返回值或异常来控制程序的执行流程。

正确停止: Two-phase Termination(两阶段终止)模式

  • 将终止过程分成两个阶段,其中第一个阶段主要是线程 T1 向线程 T2发送终止指令,而第 二阶段则是线程 T2响应终止指令。
  • Java 线程进入终止状态的前提是线程进入 RUNNABLE 状态,而利用java线程中断机制的interrupt()方法,可以让线程从休眠状态转换到RUNNABLE 状态。RUNNABLE 状态转换到终止状态,让 Java 线程自己执行完 run()方法,所以一般我们采用的方法是设置一个标志位,然后线程会在这个标志位检查,如果发现符合终止条件,则自动退出run() 方法。

两阶段终止模式是一种应用很广泛的并发设计模式,在 Java 语言中使用两阶段终止模式来终止线程,需要注意两个关键点:文章来源地址https://www.toymoban.com/news/detail-811304.html

  1. 仅检查终止标志位是不够的,因为线程的状态可能处于休眠态;
  2. 仅检查线程的中断状态也是不够的,因为我们依赖的第三方类库很可能没有正确处理中断异常.
    例如:
    Google Guava库中的com.google.common.io.Files类中的copy方法。在早期的版本中,这个方法可能没有正确处理中断异常。当在文件拷贝过程中线程被中断时,该方法可能会忽略中断并继续执行文件拷贝操作,而不会抛出InterruptedException。开发人员可能需要手动捕获中断异常并进行适当的处理。

使用场景

  1. 安全地终止线程,比如释放该释放的资源;
  2. 要确保终止处理逻辑在线程结束之前一定会执行时,可使用该方法;

到了这里,关于设计模式之并发特定场景下的设计模式 Two-phase Termination(两阶段终止)模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式应用场景

    工厂模式(Factory Pattern):使用工厂方法创建对象,而不是使用new直接实例化对象。 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关对象的接口,而无需指定它们的具体类。 单例模式(Singleton Pattern):限制一个类只能有一个实例并提供一个全局访问点

    2024年02月09日
    浏览(31)
  • 【设计模式】什么场景可以考虑使用简单工厂模式

    工厂模式是一种创建型模式,主要作用就是创建对象,将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称, 简单工厂、工厂方法、抽象工厂 ,而在23种设计模式中,只定义了工厂方法和抽象工厂,将简单工厂看作是工

    2024年01月18日
    浏览(62)
  • 【设计模式-02】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    浏览(45)
  • 【设计模式-03】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    浏览(43)
  • 【java 多线程】并发设计模式-两阶段终止模式(对interrupt的理解)

    💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜 📝 个人主页:馆主阿牛🔥 🎉 支持我:点赞👍+收藏⭐️+留言📝 📣 系列专栏:并发编程🍁 💬格言:要成为光,因为有怕黑的人!🔥 今天总结一个设计模式中的属于并发里的一个设计模式,叫两阶段终止模式

    2024年02月01日
    浏览(38)
  • 【企业场景】设计模式重点解析

    在平时的开发中,涉及到设计模式的有两块内容: 我们平时使用的框架(比如spring、mybatis等) 我们自己开发业务使用的设计模式。 在平时的业务开发中,其实真正使用设计模式的场景并不多,虽然设计号称有23种之多(不同的纬度可能会更多,不同程序员看法也不同) 但是

    2024年04月12日
    浏览(39)
  • 【C++基于多设计模式下的同步&异步日志系统】

    本项⽬主要实现⼀个⽇志系统, 其主要⽀持以下功能: 1️⃣⽀持多级别⽇志消息; 2️⃣⽀持同步⽇志和异步⽇志; 3️⃣⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中; 4️⃣⽀持多线程程序并发写⽇志; 5️⃣⽀持扩展不同的⽇志落地⽬标. 1️⃣CentOS 7.6(2核,内存2GB,SSD云硬盘

    2024年02月08日
    浏览(79)
  • 【实例项目:基于多设计模式下的日志系统(同步&异步)】

    本项目涉及的到所有源码见以下链接: https://gitee.com/ace-zhe/wz_log        日志类似于日记,通常是指对完成某件事情的过程中状态等的记录,而计算机中的日志是指日志数据,是有价值的信息宝库,各种操作系统、应用程序、设备和安全产品的日志数据能够帮助你提前发现和

    2024年02月09日
    浏览(47)
  • 【设计模式】23种设计模式——单例模式(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    介绍 所谓类的单例设计模式,就是采取一定的方法, 保证在整个的软件系统中,对某个类只能存在一个对象实例 ,并且该类只提供一个取得其对象实例的方法(静态方法)。 比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量

    2024年02月13日
    浏览(42)
  • 【设计模式】builder 创建者设计模式详解(包含电商应用场景及代码示例)

    在常见的设计模式中,“Builder” 通常是指一种设计模式,而不是具体的类或方法。Builder 模式是一种创建型设计模式,其目的是通过提供一个独立的构建器类来构建一个复杂对象。 建造者模式 (Builder Pattern) 是一种创建型设计模式,它的主要目标是为了将一个复杂对象的构

    2024年01月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包