有人了解犀牛javascript的上下文吗?我找不到关于它的任何有用的文件。我的主要问题是Context.exit() (实际上应该是cx.exit()),根据我的理解,它退出与当前线程关联的上下文?这是否意味着我需要跟踪哪个线程的功能?
主螺纹:
Context cx;
cx.evaluateReader( ... ) // load some function
start thread 2线程2:
Object o= scope.get("methodname", scope);
((Function)o).call( ... )我不打算做多线程,但如果不同的设置来自不同的线程呢?
发布于 2010-03-25 21:48:46
来自网站文档
Rhino上下文对象用于存储有关执行环境的线程特定信息。应该只有一个上下文与将要执行JavaScript的每个线程相关联。
换句话说,不要在线程之间传递上下文。只需在正在运行的线程中创建一个新上下文即可。不要担心在线程中多次调用Context.enter()。它们实际上是内部引用计数的线程局部变量。因此,在同一个线程中调用Context.enter()是非常的特性。
再次来自文档
即使已经存在与当前线程关联的上下文,这些调用也将正常工作。将返回该上下文,并增加一个内部计数器。只有当计数器达到零时,它才会与线程断开关联。
就我个人而言,我只是在任何地方使用这个代码构造:
Context ctx = Context.enter();
try {
// do something with the ctx
} finally {
Context.exit();
}实际上,在Groovy中,我将以下内容组合在一起:
def withContext(Closure closure) {
Context ctx = Context.enter();
try {
closure.call(ctx);
} finally {
Context.exit();
}
}然后传递代码,如下所示:
withContext { Context ctx ->
ScriptableObject scope = ctx.initStandardObjects()
// now to do work with the scope and ctx.
}最后一个音符。作用域不与上下文绑定,可以在线程之间持久化/传递。
https://stackoverflow.com/questions/2063331
复制相似问题