在Java脚本引擎Nashron中,可以使用Java.extend()实现继承,今天正好要在Nashron中实现一个多线程的功能,考虑到要使用java.lang.Runnable接口,正好可以使用Java.extend()来实现继承。下面是一个示例:
thread.js
load('nashorn:mozilla_compat.js');
// importPackage(Packages.java.lang);
var Runnable = Java.type('java.lang.Runnable');
var Thread = Java.type('java.lang.Thread');
function test() {
var MyRunnable = Java.extend(Runnable, {
run: function() {
for (var i = 0; i < 10; i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (e) {
System.out.println(e);
}
}
}
});
var myThread = new Thread(new MyRunnable());
myThread.start();
}
- 其中,Java.extend(Runnable, { run: function() { … } })表示继承Runnable接口,并实现run()方法。
TestNashorn.java
测试程序,在Java中调用js文件,并执行js中的test()函数。
package nashorn;
import org.apache.commons.io.FileUtils;
import javax.script.*;
import java.io.File;
// only java8
public class TestNashorn {
public static void main( String args[] ) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
String content = FileUtils.readFileToString(new File(TestNashorn.class.getResource("/thread.js").getFile()), "UTF-8");
engine.eval(content);
Invocable invocable = (Invocable)engine;
invocable.invokeFunction("test");
}
}