【问题标题】:Java: Using a thread to check a conditionJava:使用线程检查条件
【发布时间】:2023-03-10 15:09:01
【问题描述】:

我有一个问题,我不知道如何解决。我有一个运行两个嵌套循环的主线程。嵌套循环正在执行业务规则并检查某个条件以了解它何时中断。

这里的问题是这个条件很耗时,而主程序的目标是测量它所花费的时间,所以一次又一次地检查这个条件会给时间测量带来偏差。

我想我可以将检查器放入一个独立的线程中,当它满意时,通知主线程并退出嵌套循环。有可能吗?

谢谢

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    是的,这是可能的,而且没有那么困难。您所要做的就是展望未来……(双关语)。但是请认真学习Future。在 API(提供的链接)中阅读它,并且可以搜索使用示例,通常与 ExecutorService 结合使用。这正是您所需要的。

    【讨论】:

    • 我认为这不是解决方案,由于空间不足,我无法粘贴示例:您可以看到主线程正在等待可调用线程的结果。我需要主线程一直处于活动状态,而回调检查条件,当满足时通知主线程,无论当时正在执行哪条指令,因此它强制主线程执行部分代码。 ..
    • Carlos,您的主线程可以保持循环并在每个循环中轮询未来一次。它不必阻塞。 @ Prashant Pandey - 是的,他必须轮询这个解决方案,但它不会阻塞线程,因为 Future 可以立即告诉你它是否完成。是的,还有其他方法可以通过通知来做事,但这是最简单的方法
    【解决方案2】:

    是的,这是可能的。您所要做的就是安装可用于 vs code 或 sublime 的第三方插件,无论您喜欢哪个。你可以在网上查到这个。然后运行您的程序,这将显示您的程序所花费的确切时间。出于此测试目的,我建议您只运行一个要测试的线程。

    【讨论】:

      【解决方案3】:

      我认为这是不可能的。您可以控制执行回调的线程池,但不能控制确切的线程。不过,他们在 Android 中做了这样的事情:

      Running code in main thread from another thread

      在旁注中,Javascript 中的事件循环执行您想要的操作 - 从任务队列中获取回调,并将其推送到主线程的调用堆栈。

      【讨论】:

        【解决方案4】:

        如果您这样做是为了衡量代码性能/性能调整,请选择 JMH。
        如果您想在运行时监控代码块性能,请使用 JFR 或 Prometheus 等监控解决方案。
        如果您有一些依赖于此方法执行持续时间的用例,那么您可以使用 CompletableFutures,其中主线程将启动它所依赖的代码块,您可以传递回调,该回调将在所有方法完成后执行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-13
          • 1970-01-01
          • 2016-10-12
          • 1970-01-01
          • 2014-12-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多