`
he_wen
  • 浏览: 234018 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

安全关闭多线程程序

阅读更多

一、java中断机制

 

当外部线程对某线程调用了thread.interrupt()方法后,java语言的处理机制如下:

如果该线程处在可中断状态下,(调用了xx.wait(),或者Selector.select(),Thread.sleep()等特定会发生阻塞的api),那么该线程会立即被唤醒,同时会受到一个InterruptedException,同时,如果是阻塞在io上,对应的资源会被关闭。如果该线程接下来不执行“Thread.interrupted()方法(不是interrupt),那么该线程处理任何io资源的时候,都会导致这些资源关闭。当然,解决的办法就是调用一下interrupted(),不过这里需要程序员自行根据代码的逻辑来设定,根据自己的需求确认是否可以直接忽略该中断,还是应该马上退出。

如果该线程处在不可中断状态下,就是没有调用上述api,那么java只是设置一下该线程的interrupt状态,其他事情都不会发生,如果该线程之后会调用行数阻塞API,那到时候线程会马会上跳出,并抛出InterruptedException,接下来的事情就跟第一种状况一致了。如果不会调用阻塞API,那么这个线程就会一直执行下去。除非你就是要实现这样的线程,一般高性能的代码中肯定会有wait(),yield()之类出让cpu的函数,不会发生后者的情况

       具体例子详见:我的收藏中多线程--》中断机制

分享到:
评论

相关推荐

    VB.Net-C#多线程Thread-代理委托delegate编程

    C#多线程窗体控件安全访问.txt C#多线程使用TextBox控件 .txt C#多线程注意点.txt Control的Invoke和BeginInvoke.txt Invoke和BeginInvoke的真正含义.txt NET异步调用模式.txt TreeView更新线程.txt url.txt VB.NET...

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip

    基于C++实现多线程连接池MySQL源码+项目说明+详细代码注释.zip C++ 调用 MYSQL API 连接池 ## environment: * VS2022 * MySQL8.0.27 ## 高并发下频繁处理瓶颈 * 建立通信:`TCP三次握手` * 数据库服务器的`连接认证...

    Delphi多线程编程之三 同步读写全局数据

    利用CreateMutex()可以防止程序多个实例运行,如下例: Program ABC; Uses Forms,Windows,…; {$R *.res} Var hMutex:Hwnd; Begin Application.Initialize; hMutex:=CreateMutex(nil,False,Pchar...

    一个多线程的VB实例

    内容索引:VB源码,系统相关,多线程 一个VB多线程实例,测试结束时候要注意,一定要先击"结束"再关闭程序,否则电脑很可能会崩溃.  程序里的一些说明:  关于为何使用gdi 函数输出文本,这是一个很重要的内容;  程序...

    浅谈DOT NET退出应用程序

    遇到了很多问题,其中一个问题是:点击退出按钮,应用程序关闭但是***.exe依然存在内存,所以下面谈谈.NET Windows应用程序退出的方法。 .NET退出程序或者线程一般有以下五个方法: 1.Form.Close 方法 2....

    米哈游笔试题目-Java方向.docx

    生产者-消费者模型:需要设计一个多线程程序,其中有多个生产者和多个消费者,生产者不断产生数据放入共享队列,消费者从队列中取出数据进行消费。 线程池类:需要设计一个线程池类,能够动态管理线程数量,支持可...

    C#源码大集合 02(共3卷)

    │ │ ├─实例63 如何编写多线程程序 │ │ ├─实例64 如何编写DLL服务端程序 │ │ ├─实例65 如何编写DLL客户端程序 │ │ ├─实例66 如何编写用户控件程序 │ │ └─实例67 如何给程序打包 │ ├─第4章 ...

    C语言如何正确的终止正在运行的子线程

    最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使用场景...

    DirectX修复工具 V3.3增强 绿色版

    本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    cc实例 190 多线程cc实例 6.8 鼠标.c键盘相关设置 cc实例191 动画鼠标 cc实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c“网上邻居” cc...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例190 多线程cc实例   6.8 鼠标.c键盘相关设置   cc实例191 动画鼠标   cc实例192 限制鼠标移动区域  第7章 注册表   7.1 显示与隐藏  cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例190 多线程cc实例   6.8 鼠标.c键盘相关设置   cc实例191 动画鼠标   cc实例192 限制鼠标移动区域  第7章 注册表   7.1 显示与隐藏  cc 实例193 隐藏.c显示“我的电脑”.c“回收站”.c...

    如何取消.net后台线程的执行

    介绍 在使用多线程模型进行编程时,经常遇到的问题之一是,当我们关闭前台的UI线程时,后台的辅助线程仍然处于活动状态,从而导致整个应用程序无法正常退出。这时我们需要一种较安全的方式来结束后台线程的运行,...

    Android程序设计基础

    最终用户不再需要担心哪些应用程序是活动的,也不必在运行新程序前先关闭原有的一些程序。Android针对低能耗、低内存的设备进行了优化,这种根本性的优化是之前的平台从未尝试过的。  高质量的图形和声音。将类似...

    360安全浏览器 土豆

    ·新版本对系统架构重新优化,极大程度减少假死和崩溃现象; ·深层次优化浏览器启动...·内建高速下载工具,支持多线程下载和断点续传。 ·多样的皮肤选择、更自由的换肤方式,让你每天浏览网页的心情更加多姿多彩!

    360安全浏览器2.0正式版

    全面优化系统架构,浏览速度更快、更稳定 new ·新版本对系统架构重新优化,极大...·内建高速下载工具,支持多线程下载和断点续传。 ·多样的皮肤选择、更自由的换肤方式,让你每天浏览网页的心情更加多姿多彩!

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例190 多线程 实例 6.8 鼠标、键盘相关设置 实例191 动画鼠标 实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 实例193 隐藏、显示“我的电脑”、“回收站”、“网上邻居” 实例194 隐藏、显示...

    DirectX修复工具 V3.3标准 绿色版

    本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例190 多线程 实例 6.8 鼠标、键盘相关设置 实例191 动画鼠标 实例192 限制鼠标移动区域 第7章 注册表 7.1 显示与隐藏 实例193 隐藏、显示“我的电脑”、“回收站”、“网上邻居” 实例194 隐藏、显示...

    360安全浏览器很小很强大

    全面优化系统架构,浏览速度 ·新版本对系统架构重新优化,极大程度减少假死和崩溃...·内建高速下载工具,支持多线程下载和断点续传。 ·多样的皮肤选择、更自由的换肤方式,让你每天浏览网页的心情更加多姿多彩!

Global site tag (gtag.js) - Google Analytics