首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >犀牛嵌入

犀牛嵌入
EN

Stack Overflow用户
提问于 2010-01-14 10:06:57
回答 1查看 3.1K关注 0票数 5

有人了解犀牛javascript的上下文吗?我找不到关于它的任何有用的文件。我的主要问题是Context.exit() (实际上应该是cx.exit()),根据我的理解,它退出与当前线程关联的上下文?这是否意味着我需要跟踪哪个线程的功能?

主螺纹:

代码语言:javascript
复制
Context cx;
cx.evaluateReader( ... ) // load some function
start thread 2

线程2:

代码语言:javascript
复制
Object o= scope.get("methodname", scope);
((Function)o).call( ... )

我不打算做多线程,但如果不同的设置来自不同的线程呢?

EN

回答 1

Stack Overflow用户

发布于 2010-03-25 21:48:46

来自网站文档

Rhino上下文对象用于存储有关执行环境的线程特定信息。应该只有一个上下文与将要执行JavaScript的每个线程相关联。

换句话说,不要在线程之间传递上下文。只需在正在运行的线程中创建一个新上下文即可。不要担心在线程中多次调用Context.enter()。它们实际上是内部引用计数的线程局部变量。因此,在同一个线程中调用Context.enter()非常的特性。

再次来自文档

即使已经存在与当前线程关联的上下文,这些调用也将正常工作。将返回该上下文,并增加一个内部计数器。只有当计数器达到零时,它才会与线程断开关联。

就我个人而言,我只是在任何地方使用这个代码构造:

代码语言:javascript
复制
Context ctx = Context.enter();
try {
    // do something with the ctx
} finally {
    Context.exit();
}

实际上,在Groovy中,我将以下内容组合在一起:

代码语言:javascript
复制
def withContext(Closure closure) {
    Context ctx = Context.enter();
    try {
        closure.call(ctx);
    } finally {
        Context.exit();
    }
}

然后传递代码,如下所示:

代码语言:javascript
复制
withContext { Context ctx ->
    ScriptableObject scope = ctx.initStandardObjects()
    // now to do work with the scope and ctx.
}

最后一个音符。作用域不与上下文绑定,可以在线程之间持久化/传递。

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

https://stackoverflow.com/questions/2063331

复制
相关文章

相似问题

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