社区
Java SE
帖子详情
一个线程需要在任何情况下退出都必须执行一段程序改怎么写?
wsxqaz
2012-09-04 10:06:24
如果线程正常退出当然不会有什么问题,但是现在的问题是线程很可能不能正常退出,而是由其他组件强制断掉的(比如调用interrupt),现在的问题是这个线程会创建一个socket正常退出后会执行close方法,但是非正常退出后就无法预判了。我使用finalize方法但是从说明中看到不能寄希望这个方法一定会执行,但是我这里必须要执行还有什么方法可以
...全文
213
5
打赏
收藏
一个线程需要在任何情况下退出都必须执行一段程序改怎么写?
如果线程正常退出当然不会有什么问题,但是现在的问题是线程很可能不能正常退出,而是由其他组件强制断掉的(比如调用interrupt),现在的问题是这个线程会创建一个socket正常退出后会执行close方法,但是非正常退出后就无法预判了。我使用finalize方法但是从说明中看到不能寄希望这个方法一定会执行,但是我这里必须要执行还有什么方法可以
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
beiouwolf
2012-09-04
打赏
举报
回复
socket这种假设你的程序被关闭了,这条socket也会被自动断掉
java基本上是没有资源清理的问题
实在需要程序钩子的话,有个 Runtime.getRuntime().addShutdownHook(Thread);方法
接收参数是一个线程,这个线程会在程序被终止时自动执行
我一般用ShutdownHook来做一些队列序列化之类的操作
zxhcloth
2012-09-04
打赏
举报
回复
只要是程序让它退出的,不管正常还是非正常都可以通过try..finally里的finally满足你的要求。
但是如果是外界强制退出的,比如kill进程,那是没有办法的。
除非你写个监控程序,一直监控着正运行的进程或线程,当一段时间没响应后(就认为已死或飞正常退出),由这个监控程序去执行你要的操作,不过这也有局限性,有些操作还是不能操作。
MiceRice
2012-09-04
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
run里用try...finally
[/Quote]
支持一把。也就是把所有执行代码放在 try 之内,那些必须负责收尾的代码放在 finally 之内。
龙四
2012-09-04
打赏
举报
回复
如果是用的线程池,可以重写ThreadPoolExecutor的afterExecute方法
龙四
2012-09-04
打赏
举报
回复
run里用try...finally
【linux 多
线程
并发】
线程
退出
自动清理函数的使用,释放
线程
申请的资源,异常
退出
自动调用
现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。
java
程序
退出
时
执行
java
程序
退出
时
执行
描述 对于
程序
退出
前
执行
特定过程, C++中有析构方法,java中可以使用Runtime中的addShutdownHook(Thread hook) 向JVM注册
一个
关闭的
线程
事件,
程序
一旦结束 时,
线程
hook就会被
执行
,处理最后的事情。
程序
结束是指
程序
自然结束或者System.exit(0)、System.exit(-1) 或者Runtime.getRuntime().exit(-1)、Runtime.getRuntime().exit(0)等。即使是
程序
异常退
多
线程
情况
下,主
线程
先
退出
,子
线程
会被强制
退出
吗
1、进程中
线程
之间的关系
线程
不像进程,
一个
进程中的
线程
之间是没有父子之分的,都是平级关系。即
线程
都是一样的,
退出
了
一个
不会影响另外
一个
。 但是所谓的"主
线程
"main,其入口代码是类似这样的方式调用main的:exit(main(…))。 main
执行
完之后, 会调用exit()。 exit() 会让整个进程over终止,那所有
线程
自然都会
退出
。 2、主
线程
先
退出
,子
线程
继续运行的方法 在进程...
c#
程序
退出
和
线程
退出
编
写
Winform
程序
时,发现在
程序
退出
后,有的
线程
还在运行。 通过网上查看得知
需要
设置
线程
属性,如下
程序
所示: Thread th = new Thread(Get); th.IsBackground = true;//
需要
设置 这个属性的意思就是把
线程
设置为后台
线程
。 然后关闭进程的同时,
线程
也会随之关闭。 IsBackground对
线程
的重要作用 1、当在主
线程
中创建了
一个
线程
,那么该
线程
的IsBackground默认是设置为FALSE的。 2、当主线
linux
线程
无异常
退出
,记
一个
linux
程序
无提示
退出
问题
1.问题描述
程序
有多个
线程
,主
线程
启动
一个
线程
拉取远端的视频流,在拉取视频流的回调函数里对获取的数据进行处理。主
线程
启动拉流
线程
之后就在 while(1) 中进入睡眠状态,剩下拉流
线程
拉取数据并进行处理。目前遇到的问题是:
程序
运行
一段
时间没有任何提示就
退出
了,按照预期,没有人为干预结束这个
程序
,应该一直运行下去。这个问题是必现的,只是有时候
程序
可以运行一天有时候半个小时,之后就会出现这个现象。从应...
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章