我正在嘗試在java中運行一些javascripts。我不確定腳本是否正確,我想在一段時間後終止該調用。這是我如何運行腳本。如何殺死java Invocable
returnMethod = invocableEngine.invokeFunction("main", input);
我的想法是運行像deamon線程,它啓動第二個線程超時。第二個線程 - 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()中發現了一些非常有趣的東西。當它不能保證線程停止時,是否有保證的方式來做到這一點?
除了竭盡全力嘗試停止處理主動執行的任務之外,沒有任何保證。例如,典型的實現將通過Thread.interrupt()取消,所以任何不能響應中斷的任務都不會終止。
在此先感謝
有沒有保證的方式來停止線程。 Java線程必須自行停止以保證程序的安全。 –