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