具有多线程和锁的 Java ScriptEngine

标签 java multithreading v8 scriptengine jsr223

我使用的是 JSR223 ScriptEngine ( JAV8 ),它本身不是线程安全的。由于我需要多个线程才能访问 ScriptEngine,因此每个 ScriptEngine 都属于一个 EngineContext 对象。 这些 EngineContext 再次具有一个 ReentrantLock,各个线程在访问 ScriptEngine 之前需要获取该锁。

我遇到的问题是线程成功获取了锁,但当两个线程调用它时,有时我仍然会遇到 JVM 崩溃(著名的 SIGSEGV (0xb))。

作为概述,这里是锁定过程的一些伪代码

Thread needs the ScriptEngine
Thread waits and acquires lock
Thread uses the ScriptEngine (Methods: eval, put)
Thread releases the lock
Thread does something else

我真的不确定这里的问题是什么。

最佳答案

SIGSEGV 始终是由 native 代码中的错误引起的。假设您自己没有编写任何 native 代码,那么您要么滥用该库,要么触发库中的错误,要么触发 JVM 中的错误(按可能性降序排列......)。

如果没有您提供的更多详细信息(代码片段、崩溃日志),很难判断您的具体问题是什么。

关于具有多线程和锁的 Java ScriptEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033511/

相关文章:

javascript - V8 shell 和从标准输入读取

java - 将 Shape 从 awt 转换为 javafx 中的 Shape

java - 如何在 Java 中存储文本文件字符串以供以后使用

ruby - 来自 rails 3 中 therubyracer/v8 的 javascript 错误的堆栈跟踪

javascript - V8/nodejs 中的人为性能限制

java - 如何阻塞直到线程池为空......线程数量未知?

java - JPA只指RDBMS吗

java - 按字母顺序对 Java 对象排序为 JSON 对象

c - 在读写器问题中什么时候唤醒作者?释放互斥体之前还是之后?

javascript - 如何同步依赖于多个ajax请求响应的javascript代码?