gpt4 book ai didi

java - 如何杀死java Invocable

转载 作者:行者123 更新时间:2023-11-30 04:59:46 40 4
gpt4 key购买 nike

我正在尝试在 java 中运行一些 javascript。我不确定脚本是否正确,我想在一段时间后终止调用。这就是我运行脚本的方式。

returnMethod = invocableEngine.invokeFunction("main", input);

我的想法是运行类似守护线程的东西,它启动第二个线程并超时。第二个线程 - ScriptEvaluator 运行可调用函数,如上所述。 ScriptEvaluator 实现了 Runnable。

ScriptEvaluator se = new ScriptEvaluator(r);
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(Executors.callable(se)), timeout, TimeUnit.MILLISECONDS);
executor.shutdownNow();

好吧,这不起作用。超时后线程仍然运行。

另一个要求是只有一个 SkriptEvaluator 线程正在运行。

编辑:我在 shutdownNow() 中发现了一些非常有趣的东西。当它不能保证线程停止时,是否有保证的方法可以做到这一点?

There are no guarantees beyond best-effort attempts to stop processing actively executing tasks. For example, typical implementations will cancel via Thread.interrupt(), so any task that fails to respond to interrupts may never terminate.

提前致谢

最佳答案

您可以测试 ScriptEvaluator() 如何响应 Thread.interrupt()。如果写得好,那么 executor.shutdownNow() 就会起作用。如果不是,那么就没有完美的解决方案。

但是,假设您的 javascript 与主代码交互不多,您可以使用 Thread.stop()。如果您决定这样做,请确保您了解 why not to use Thread.stop()一般来说。

关于java - 如何杀死java Invocable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231209/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com