我正在构建一个javascript api,它将使用mozilla rhino调用一些java对象。
一切都很好,但是我想避免无限制的循环,这可能会减慢我的java应用程序。
例如(在javascript中):
while(true) doSomething(); // doSomthing will call a method in java
在现代浏览器中,在一段时间后出现错误,告诉脚本正在使应用程序运行缓慢,并且如果我想继续并停止脚本。
如果可能的话,我想在我的java应用程序上实现它,但我不知道如何实现。 我能想到的唯一解决方案是计算每秒调用的方法数量,以及停止脚本的数量是多少。你还有其他想法吗?
答案 0 :(得分:1)
计算方法调用不适用于不调用任何方法的代码,例如:
while (true) {
i++;
}
我想想你想要的是什么observeInstructionCount().另见discussion here - 他们讨论的一些东西看起来有些不确定,但它可能对你有所帮助。
答案 1 :(得分:0)
如果你可以使应用程序多线程,你可以生成一个新的线程来处理来自javascript的每个调用。在线程的开头,你记录开始时间,并创建一些超时逻辑来实现它。
public void doJavaScript() {
final long start = System.currentTimeMillis();
final long timeout = 1000;
new Thread(){
@Override
public void run() {
while ((start + timeout) < System.currentTimeMillis()) {
... do work ...
}
}
}.start();
}