如何在其他应用程序运行时阻止我的Java程序滞后?

时间:2011-03-08 12:25:43

标签: java awtrobot

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

尽管代码运行良好,但在其他应用程序运行时似乎存在“滞后”。

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

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

1 个答案:

答案 0 :(得分:1)

在开始考虑减少延迟之前,首先必须了解它的原因。我将以一种方式呈现答案,你可以理解“为什么”以及“做什么”。

根据您的描述,只有当其他程序与您的机器人一起运行时才会出现滞后,最可能导致滞后的原因是:


缺乏系统资源 - 太多事情同时运行,消耗太多内存/处理能力,从而使操作系统减慢某些程序以便能够运行其他

该怎么做:要尝试解决此类问题,您可以尝试优化代码,使其使用更少的内存/处理能力,从而减少延迟的原因,并隐式减少滞后本身。不幸的是,对于任何第三方程序来说,合法地做同样的事情是很难的,所以如果并发应用程序不属于您,则很难完全消除滞后。


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

怎么做:在这种情况下,除了减少并发进程的优先级同时增加你的优先级(为了让你的程序运行得更快,有效地降低它们),几乎没有任何合法的方法,或完全关闭它们。

怎么做:为了提高流程的优先级,这是将其设置为80%的代码(默认值通常为50%),插入main()

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

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