在其他应用程序运行时,如何防止Java程序落后?

在其他应用程序运行时,如何防止Java程序落后?,java,awtrobot,Java,Awtrobot,我用Java编写了一个简单的代码,它使用Robot类根据某些条件移动鼠标 虽然代码运行得很好,但在其他应用程序运行时似乎存在“滞后” 我认为Java在发布系统消息时存在一些问题 是否有解决方法来避免这种情况?在开始考虑减少滞后之前,您必须首先了解其原因。我将以一种你能理解“为什么”和“做什么”的方式给出答案 根据您的描述,延迟仅在其他程序与您的机器人一起运行时发生,最可能的原因是: 缺乏系统资源-太多的东西同时运行,消耗了太多的内存/处理能力,从而使操作系统降低了一些程序的速度,以便能够运行其

我用Java编写了一个简单的代码,它使用Robot类根据某些条件移动鼠标

虽然代码运行得很好,但在其他应用程序运行时似乎存在“滞后”

我认为Java在发布系统消息时存在一些问题


是否有解决方法来避免这种情况?

在开始考虑减少滞后之前,您必须首先了解其原因。我将以一种你能理解“为什么”和“做什么”的方式给出答案

根据您的描述,延迟仅在其他程序与您的机器人一起运行时发生,最可能的原因是:


缺乏系统资源-太多的东西同时运行,消耗了太多的内存/处理能力,从而使操作系统降低了一些程序的速度,以便能够运行其他程序

怎么办:要解决这些问题,您可以尝试优化代码,使其使用更少的内存/处理能力,从而减少延迟的原因,同时隐式地减少延迟本身。不幸的是,很难在法律上对任何第三方程序执行相同的操作,因此,如果并发应用程序不是您的,则很难完全消除延迟


关于不可复制、不可共享组件的并发性-一次不能由多个进程访问且不能克隆到多个实例的一个或多个组件需要由多个正在运行的进程使用。当一个进程控制它时,其他进程别无选择,只能等待组件被释放

该怎么办:在这种情况下,除了降低并发进程的优先级,同时增加优先级(有效地降低优先级,以便程序运行得更快)或完全关闭它们之外,几乎没有其他合法方法

如何操作:要提高流程的优先级,请将代码设置为80%(默认值通常为50%),插入
main()

Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8))


注意:您可以使用
Thread.MAX_PRIORITY
将您的进程设置为“永不”释放它所需的任何组件,而不乘以
0.8
,但这是未推荐的,因为它几乎会暂停任何需要组件的进程(类似于在运行时关闭它们),如果您的程序因任何原因而挂起,这些组件也会挂起。在开始考虑减少延迟之前,您必须首先了解其原因。我将以一种你能理解“为什么”和“做什么”的方式给出答案

根据您的描述,延迟仅在其他程序与您的机器人一起运行时发生,最可能的原因是:


缺乏系统资源-太多的东西同时运行,消耗了太多的内存/处理能力,从而使操作系统降低了一些程序的速度,以便能够运行其他程序

怎么办:要解决这些问题,您可以尝试优化代码,使其使用更少的内存/处理能力,从而减少延迟的原因,同时隐式地减少延迟本身。不幸的是,很难在法律上对任何第三方程序执行相同的操作,因此,如果并发应用程序不是您的,则很难完全消除延迟


关于不可复制、不可共享组件的并发性-一次不能由多个进程访问且不能克隆到多个实例的一个或多个组件需要由多个正在运行的进程使用。当一个进程控制它时,其他进程别无选择,只能等待组件被释放

该怎么办:在这种情况下,除了降低并发进程的优先级,同时增加优先级(有效地降低优先级,以便程序运行得更快)或完全关闭它们之外,几乎没有其他合法方法

如何操作:要提高流程的优先级,请将代码设置为80%(默认值通常为50%),插入
main()

Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8))


注意:您可以使用
Thread.MAX_PRIORITY
将您的进程设置为“永不”释放它所需的任何组件,而不乘以
0.8
,但这是未推荐的,因为它几乎会暂停任何需要组件的进程(类似于在运行时关闭它们),如果您的程序由于任何原因挂起,组件也将挂起。

您到目前为止做了什么(
code
)?您可以更改java.exe进程的操作系统优先级吗?您到目前为止做了什么(
code
)?您可以更改java.exe进程的操作系统优先级吗?