中断一个协作机制,使得一个线程能够另一个线程停止当前工作。
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秒倒计时,用户可以选择在倒计时结束前点击界面来取消自动关闭,或者等待倒计时结束后,程序自动关闭界面。这样的设计可以增加用户体验,给用户...
总结来说,"取消宏则关闭工作簿"是Excel中与宏安全性和工作簿设置相关的问题。理解和掌握宏的管理、信任中心设置以及VBA编程是解决此类问题的关键。通过调整这些设置,用户既可以确保系统的安全性,也能灵活地使用...
在Android平台上,设置和取消闹钟是常见的功能需求,尤其对于日程管理或者提醒类的应用来说至关重要。Android提供了AlarmManager服务来实现这类功能。本文将详细介绍如何在Android中使用AlarmManager来设置和取消...
在Web开发中,如何捕捉网页的关闭和取消关闭事件,是一个常被提及的问题。通常情况下,我们主要会用到两个事件来实现这个功能:onbeforeunload和onunload。但这两个事件并不能直接区分用户是选择了离开页面,还是...
概要:本文介绍如何使用 Spring Boot 3.X 和 WebSocket 实现消息推送,并动态开启、关闭和取消定时任务。通过WebSocket实现实时通信,结合定时任务管理,可实现灵活的消息推送和任务控制。 使用人群:适合有Spring ...
在这个示例中,如果 `clientX` 和 `clientY` 小于等于0,则认为用户是在关闭窗口;否则认为是在刷新页面。 #### 三、实现细节与注意事项 1. **兼容性问题**: - 不同浏览器对 `onbeforeunload` 和 `onunload` ...
windows 启动管理器关闭 取消软件NTBOOTautofix v2.5.3- NT系统引导菜单自动修复工具 ------------------------------------------------------------------------------------------------------------------------...
这种自定义对话框不仅适用于简单的信息提示,还可以扩展以包含更复杂的交互逻辑,例如根据用户行为改变关闭时间,或者在特定条件下取消自动关闭。 总结一下,Delphi中实现消息对话框的自动关闭主要涉及自定义窗体、...
而"bootstrap-closable-tab.js"则是在原生Bootstrap Tab组件的基础上进行的扩展,增加了标签页的关闭功能,使得用户可以根据需要关闭不需要的标签页,提高了交互性和用户体验。 在这个扩展中,`bootstrap-closable-...
通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动关闭。然而,在某些特定场景下,我们可能希望在用户触发某个操作(如输入验证失败)时保持Dialog不关闭,...
第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...
第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...
为了提供更完整的用户体验,我们可以监听窗体的`Closing`事件,并在该事件处理程序中取消关闭操作。这样,当用户尝试关闭窗口时,我们可以执行自定义逻辑,比如将窗口最小化到系统托盘: ```csharp private void ...
第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 jvm关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置threadpoolexecutor 8.4 扩展...
4. **取消和关闭**:在任务完成或用户需要取消操作时,调用`dismiss()`方法关闭`ProgressDialog`。 ```java dialog.dismiss(); ``` 在`ProgressDialog Demo`中,开发者可能通过异步任务(如`AsyncTask`)或者线程来...
8. **取消监听器(Cancel Listener)**:`setOnCancelListener()`和`setOnDismissListener()`可以监听对话框的取消和关闭事件。 这个工程文件`AlertDialogBuilder`很可能包含了上述功能的扩展和封装,可能包括...
在这里,`e.Cancel = true`是关键,它告诉系统取消关闭操作。同时,我们可能会弹出一个对话框提醒用户需要完成的操作。 `FormClosingEventArgs`对象的`Cancel`属性用于控制窗体是否关闭。当其值被设置为`true`时,...
在本教程中,我们将深入探讨如何使用`ShowDialog()`实现简单、无代码的关闭和退回操作。 `ShowDialog()`的调用方式通常是在主窗体中创建并显示一个子窗体。例如,你可能有一个主窗体(Form1)和一个需要作为对话框...
本文将深入探讨如何关闭摄像头的麦克风,以及背后的原理和技术细节。 #### 内置麦克风的意外启动 购买并安装摄像头后,用户可能会遇到一个常见问题:即使未连接外部麦克风,对方也能听到自己的声音。这主要是因为...