gpt4 book ai didi

multithreading - 杀死 JavaME 1.2 线程的最佳实践?

转载 作者:行者123 更新时间:2023-12-03 12:58:00 25 4
gpt4 key购买 nike

问题:我很想知道在 Java 1.2 中终止作为后台线程运行的长期操作的最佳实践(我们称之为线程 WorkerThread)。
设想
具体来说,我正在为 Blackberry 设备开发一个应用程序,借此建立 HTTP 连接。大图:如果将 URL 请求转发到后台线程 ( WorkerThread ),则该线程发出请求并使用回调返回结果。
场景详情
现在存在连接时存在数据连接的情况但随后 无论出于何种原因(通过隧道行驶),该连接不再存在。由于 Blackberry 设计架构的限制,实际连接将挂起,因为超时固定为 2 分钟。因此,非常需要终止已挂起相对(15 秒)较长时间的连接。
我目前的解决方案 - 2 头?
现在我目前的解决方案是运行 WorkerThread在另一个线程中(让我们调用这个新线程 MonitorThead )。 MonitorThread开始 WorkerThread , 休眠 1000 毫秒,然后例行检查是否 WorkerThread还活着。如果 15 秒后 WorkerThread 仍然存在,MonitorThread 将 WorkerThread 置于 sleep 状态并退出。这真的是最好的方法吗?
问题摘要和要点
总之,以下是与该问题相关的核心问题和关键限制。干杯!
如何成功杀死卡在特定操作中的 java 后台线程?
场景限制:

  • 无法控制操作暂停
    并检查线程请求状态
  • 特定于黑莓的
    Java ME 1.2 的实现及其
    Thread API所以没有明确的
    杀()方法
  • 最关心的最佳实践以及如何
    最安全地杀死一个保持线程。

  • 跟进/编辑
    Neil Coffey 建议我简单地持有对连接对象的引用,而不是调用 关闭()在那个物体上。我目前正在研究这个...

    最佳答案

    如何杀死一个线程是一个难题。没有保证能够停止或中断线程的方法。但是,如果您采用当前架构并在超时时关闭流(而不是 Connection ),这应该会导致卡在 I/O 中的线程上发生 I/O 异常。如果它不会导致 IOException,那么它至少应该导致读取或写入以 EOF 返回。

    请注意,关闭连接无济于事,正如 JavaDoc 所说:

    Any open streams will cause the connection to be held open until they themselves are closed.



    您必须关闭从 Connection 派生的流。

    关于multithreading - 杀死 JavaME 1.2 线程的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/837948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com