55 lines
1.7 KiB
Java
55 lines
1.7 KiB
Java
import java.io.IOException;
|
|
|
|
import org.luaj.vm2.Globals;
|
|
import org.luaj.vm2.lib.jse.JsePlatform;
|
|
|
|
/** Simple toy program illustrating how to run Luaj in multiple threads.
|
|
*
|
|
* By creating separate Globals in each thread, scripts can be run in each thread.
|
|
*
|
|
* However note the following:
|
|
* - type-related metatables such as LuaNumber.s_metatable are shared by all threads, so are not thread-safe.
|
|
* - creating additional threads within a Java element called by lua could result in shared access to globals.
|
|
*/
|
|
public class SampleMultiThreaded {
|
|
|
|
static class Runner implements Runnable {
|
|
final String script1, script2;
|
|
Runner(String script1, String script2) {
|
|
this.script1 = script1;
|
|
this.script2 = script2;
|
|
}
|
|
public void run() {
|
|
try {
|
|
// Each thread must have its own Globals.
|
|
Globals g = JsePlatform.standardGlobals();
|
|
|
|
// Once a Globals is created, it can and should be reused
|
|
// within the same thread.
|
|
g.loadFile(script1).call();
|
|
g.loadFile(script2).call();
|
|
|
|
} catch ( Exception e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void main(final String[] args) throws IOException {
|
|
final String script1 = args.length > 0? args[0]: "test/lua/perf/nsieve.lua";
|
|
final String script2 = args.length > 1? args[1]: "test/lua/perf/binarytrees.lua";
|
|
try {
|
|
Thread[] thread = new Thread[10];
|
|
for (int i = 0; i < thread.length; ++i)
|
|
thread[i] = new Thread(new Runner(script1, script2),"Runner-"+i);
|
|
for (int i = 0; i < thread.length; ++i)
|
|
thread[i].start();
|
|
for (int i = 0; i < thread.length; ++i)
|
|
thread[i].join();
|
|
System.out.println("done");
|
|
} catch ( Exception e ) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|