`

取消和关闭

    博客分类:
  • java
JVM 
阅读更多

中断一个协作机制,使得一个线程能够另一个线程停止当前工作。
1.任务取消
当外部代码能够在活动自然结束之前,把他改成完成状态,这个活动被称为“可取消的”(cacnellable)。
原因:用户请求取消、限时活动、应用程序事件、错误、关闭(优雅关闭,强制关闭)。
取消策略(cancellation policy):一个可以取消的任务必须拥有取消策略。
中断
        阻塞类库的方法支持中断。
        每一个线程都有中断状态,在中断的时候,这个状态被设置为true。interrupt()中断目标线程,isInterrupted()返回目标线程的中断状态,interrupted()静态方法,清除目标线程的中断状态,并返回之前的值,是清除中断状态的唯一方法。
        Thread.sleep(1), object.wait() 视图检测线程何时被中断,并提前返回。对中断的响应表现为:清除中断状态,抛出interruptedException
        调用interrupt()并不意味着停止了目标线程当前的工作,它只是传递一个中请求中断的信息。
中断是实现取消最明智的选择。


中断策略
        当检查到中断请求的时候,任务并不需要放弃所有的事情。它可以选择推迟,直到更合适的时机。只要记得它被请求过中断,完成当前的任务,然后抛出interruptException。
        直接把中断传递给调用者。
        如果需要捕获interruptException,捕获之后应该通过Thead.currentThread.interrupt()恢复中断。
        因为每个线程都有自己的中断策略,所以你不应该中断线程,除非你知道这个中断对线程意味着什么
响应中断
        只有实现了线程中断策略的代码才可以接收中断请求,通用的目的任务和库代码绝不应该接收中断请求。
        有些活动不支持取消,但可能调用可中断的阻塞方法,那么它们必须在循环中调用这些阻塞方法,当发现中断后重新尝试,

通过Future来取消
处理不可中断的阻塞
使用newTask封装非标准取消
        2.停止基于线程的服务
线程的所有权是不能传递的。
服务应该提供生命周期方法。
关闭ExecutorService,shutDown和shutDownNow
致命药丸
shuttingdown的局限性
        3、处理反常的线程终止
未捕获的异常处理UncaughtExceptionHandler,需要提供ThreadFactory给ThreadPoolExecutor的构造函数。execute()和submit()的区别


       

分享到:
评论

相关推荐

    android的3秒倒计时关闭界面或点击关闭

    在Android应用开发中,有时我们需要实现一种功能,即在用户界面上显示3秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...

    取消宏则关闭工作簿

    总结来说,"取消宏则关闭工作簿"是Excel中与宏安全性和工作簿设置相关的问题。理解和掌握宏的管理、信任中心设置以及VBA编程是解决此类问题的关键。通过调整这些设置,用户既可以确保系统的安全性,也能灵活地使用...

    android设置和取消闹钟

    在Android平台上,设置和取消闹钟是常见的功能需求,尤其对于日程管理或者提醒类的应用来说至关重要。Android提供了AlarmManager服务来实现这类功能。本文将详细介绍如何在Android中使用AlarmManager来设置和取消...

    分享JavaScript获取网页关闭与取消关闭的事件

    在Web开发中,如何捕捉网页的关闭和取消关闭事件,是一个常被提及的问题。通常情况下,我们主要会用到两个事件来实现这个功能:onbeforeunload和onunload。但这两个事件并不能直接区分用户是选择了离开页面,还是...

    如何利用 Spring Boot 3.X 和 WebSocket 来实现消息推送功能,并实现动态开启、关闭和取消定时任务的功能?

    概要:本文介绍如何使用 Spring Boot 3.X 和 WebSocket 实现消息推送,并动态开启、关闭和取消定时任务。通过WebSocket实现实时通信,结合定时任务管理,可实现灵活的消息推送和任务控制。 使用人群:适合有Spring ...

    判断浏览器是刷新还是关闭窗口

    在这个示例中,如果 `clientX` 和 `clientY` 小于等于0,则认为用户是在关闭窗口;否则认为是在刷新页面。 #### 三、实现细节与注意事项 1. **兼容性问题**: - 不同浏览器对 `onbeforeunload` 和 `onunload` ...

    windows启动管理器关闭取消

    windows 启动管理器关闭 取消软件NTBOOTautofix v2.5.3- NT系统引导菜单自动修复工具 ------------------------------------------------------------------------------------------------------------------------...

    用Delphi编写的消息对话框的自动关闭

    这种自定义对话框不仅适用于简单的信息提示,还可以扩展以包含更复杂的交互逻辑,例如根据用户行为改变关闭时间,或者在特定条件下取消自动关闭。 总结一下,Delphi中实现消息对话框的自动关闭主要涉及自定义窗体、...

    bootstrap-closable-tab.js tab标签页扩展之关闭全部和关闭其他

    而"bootstrap-closable-tab.js"则是在原生Bootstrap Tab组件的基础上进行的扩展,增加了标签页的关闭功能,使得用户可以根据需要关闭不需要的标签页,提高了交互性和用户体验。 在这个扩展中,`bootstrap-closable-...

    Android 控制关闭Dialog

    通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动关闭。然而,在某些特定场景下,我们可能希望在用户触发某个操作(如输入验证失败)时保持Dialog不关闭,...

    Java并发编程part2

    第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...

    JAVA并发编程实践_中文版(1-16章全)_1/4

    第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...

    c# winform取消右上角关闭按钮的实现方法

    为了提供更完整的用户体验,我们可以监听窗体的`Closing`事件,并在该事件处理程序中取消关闭操作。这样,当用户尝试关闭窗口时,我们可以执行自定义逻辑,比如将窗口最小化到系统托盘: ```csharp private void ...

    Java并发编程实践part1

    第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...

    ProgressDialog Demo

    4. **取消和关闭**:在任务完成或用户需要取消操作时,调用`dismiss()`方法关闭`ProgressDialog`。 ```java dialog.dismiss(); ``` 在`ProgressDialog Demo`中,开发者可能通过异步任务(如`AsyncTask`)或者线程来...

    封装AlertDialog.Builder方法工程

    8. **取消监听器(Cancel Listener)**:`setOnCancelListener()`和`setOnDismissListener()`可以监听对话框的取消和关闭事件。 这个工程文件`AlertDialogBuilder`很可能包含了上述功能的扩展和封装,可能包括...

    C#阻止窗体关闭判断关闭条件阻止窗体关闭.rar

    在这里,`e.Cancel = true`是关键,它告诉系统取消关闭操作。同时,我们可能会弹出一个对话框提醒用户需要完成的操作。 `FormClosingEventArgs`对象的`Cancel`属性用于控制窗体是否关闭。当其值被设置为`true`时,...

    ShowDialog()的超简单的关闭用法

    在本教程中,我们将深入探讨如何使用`ShowDialog()`实现简单、无代码的关闭和退回操作。 `ShowDialog()`的调用方式通常是在主窗体中创建并显示一个子窗体。例如,你可能有一个主窗体(Form1)和一个需要作为对话框...

    如何关闭摄像头的麦克风

    本文将深入探讨如何关闭摄像头的麦克风,以及背后的原理和技术细节。 #### 内置麦克风的意外启动 购买并安装摄像头后,用户可能会遇到一个常见问题:即使未连接外部麦克风,对方也能听到自己的声音。这主要是因为...

Global site tag (gtag.js) - Google Analytics