我们在应用程序中使用Lua,并在多线程环境中执行时遇到问题。 以下是用于应用程序的步骤和示例代码。 1)我们在Lua中创建函数,编译它并存储编译的字节代码。 公共课
ScripletSerialization {
String script = "poc/lua/hello.lua";
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(script);
Prototype chunk = LuaC.instance.compile(inStream, "Hello");
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
DumpState.dump(chunk, oStream, Boolean.TRUE, 1, Boolean.TRUE);
byte[] luaByteArray = oStream.toByteArray();
// using ByteArray
2)我们正在调用以下的编译函数。
Globals globals = null;
globals = JsePlatform.standardGlobals();
Prototype chunk1 = globals.undumper.undump(new ByteArrayInputStream(
luaByteArray), "Hello");
LuaClosure f = new LuaClosure(chunk1, globals);
f.call();
LuaValue lvalue= globals.get("Hello”);
LuaValue output= lvalue.call(luaTableInput);
代码在单线程env中工作正常,但是如果我们在多线程env中运行代码,它会给出lua异常,如下所示。 Attemt连接nil和string。