【发布时间】:2009-05-08 02:07:17
【问题描述】:
问题:我很想知道在 Java 1.2 中终止作为后台线程运行的长期操作的最佳实践(让我们将此线程称为 WorkerThread)。
场景
具体来说,我正在为 Blackberry 设备开发一个应用程序,通过它建立 HTTP 连接。大图:如果将 URL 请求转发到后台线程 (WorkerThread),该线程会发出请求并使用回调返回结果。
场景详情
现在存在这样一种情况,即在连接时,存在数据连接但随后无论出于何种原因(通过隧道),该连接不再存在。由于 Blackberry 设计架构的限制,实际连接将挂起,因为超时固定为 2 分钟。因此,迫切需要终止已挂起相对较长时间(15 秒)的连接。
我目前的解决方案 - 2 条?
现在我当前的解决方案是在另一个线程中运行WorkerThread(我们称这个新线程为MonitorThead)。 MonitorThread 启动 WorkerThread,休眠 1000 毫秒,然后定期检查 WorkerThread 是否还活着。如果 15 秒后 WorkerThread 仍然存在,MonitorThread 将 WorkerThread 置于睡眠状态并退出。这真的是最好的方法吗?
问题总结及要点
总之,以下是与该问题相关的核心问题和关键限制。干杯!
如何成功杀死卡在特定操作中的 java 后台线程?
场景限制:
- 无法控制操作暂停 并检查线程请求状态
- 黑莓专用 Java ME 1.2 的实现及其 Thread API 所以没有明确的 kill() 方法
- 最关心的最佳实践和如何 最安全地杀死一个保持线程。
跟进/编辑
Neil Coffey 建议我只保留对连接对象的引用,然后在该对象上调用 close()。我目前正在研究这个...
【问题讨论】:
标签: multithreading blackberry java-me kill