首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多线程和锁的Java ScriptEngine

具有多线程和锁的Java ScriptEngine
EN

Stack Overflow用户
提问于 2014-01-10 07:39:55
回答 2查看 829关注 0票数 3

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

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

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

代码语言:javascript
复制
Thread needs the ScriptEngine
Thread waits and acquires lock
Thread uses the ScriptEngine (Methods: eval, put)
Thread releases the lock
Thread does something else

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

EN

回答 2

Stack Overflow用户

发布于 2014-04-08 21:31:17

SIGSEGV总是由本机代码中的错误引起的。假设您自己没有编写任何本机代码,那么您要么误用了库,要么触发了库中的bug,要么触发了JVM中的bug (按照可能性的降序...)。

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

票数 0
EN

Stack Overflow用户

发布于 2014-06-11 21:17:39

ReentrantLock应该与使用synchronized的工作方式相同,包括内存效果,但在这种情况下可能不是这样(可能与本机代码有关),并且ScriptEngine的状态在线程之间不是完全同步的。您是否尝试过使用synchronized而不是ReentrantLock?

如果这还不能解决问题,那么您是否尝试过为每个线程设置一个单独的ScriptEngine,例如使用ThreadLocal?根据线程类型的不同,引入的开销可能不会太大。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21033511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档