【发布时间】:2023-03-10 15:09:01
【问题描述】:
我有一个问题,我不知道如何解决。我有一个运行两个嵌套循环的主线程。嵌套循环正在执行业务规则并检查某个条件以了解它何时中断。
这里的问题是这个条件很耗时,而主程序的目标是测量它所花费的时间,所以一次又一次地检查这个条件会给时间测量带来偏差。
我想我可以将检查器放入一个独立的线程中,当它满意时,通知主线程并退出嵌套循环。有可能吗?
谢谢
【问题讨论】:
标签: java multithreading
我有一个问题,我不知道如何解决。我有一个运行两个嵌套循环的主线程。嵌套循环正在执行业务规则并检查某个条件以了解它何时中断。
这里的问题是这个条件很耗时,而主程序的目标是测量它所花费的时间,所以一次又一次地检查这个条件会给时间测量带来偏差。
我想我可以将检查器放入一个独立的线程中,当它满意时,通知主线程并退出嵌套循环。有可能吗?
谢谢
【问题讨论】:
标签: java multithreading
是的,这是可能的,而且没有那么困难。您所要做的就是展望未来……(双关语)。但是请认真学习Future。在 API(提供的链接)中阅读它,并且可以搜索使用示例,通常与 ExecutorService 结合使用。这正是您所需要的。
【讨论】:
是的,这是可能的。您所要做的就是安装可用于 vs code 或 sublime 的第三方插件,无论您喜欢哪个。你可以在网上查到这个。然后运行您的程序,这将显示您的程序所花费的确切时间。出于此测试目的,我建议您只运行一个要测试的线程。
【讨论】:
我认为这是不可能的。您可以控制执行回调的线程池,但不能控制确切的线程。不过,他们在 Android 中做了这样的事情:
Running code in main thread from another thread
在旁注中,Javascript 中的事件循环执行您想要的操作 - 从任务队列中获取回调,并将其推送到主线程的调用堆栈。
【讨论】:
如果您这样做是为了衡量代码性能/性能调整,请选择 JMH。
如果您想在运行时监控代码块性能,请使用 JFR 或 Prometheus 等监控解决方案。
如果您有一些依赖于此方法执行持续时间的用例,那么您可以使用 CompletableFutures,其中主线程将启动它所依赖的代码块,您可以传递回调,该回调将在所有方法完成后执行。
【讨论】: