neh*_*heh 5 java rhino embedding
任何人都了解犀牛javascript上下文?我找不到任何有用的文档.我的主要问题是Context.exit()(真的应该是cx.exit())根据我的理解退出与当前线程相关的上下文?这是否意味着我需要跟踪哪个线程的作用?
主线程:
Context cx;
cx.evaluateReader( ... ) // load some function
start thread 2
Run Code Online (Sandbox Code Playgroud)
线程2:
Object o= scope.get("methodname", scope);
((Function)o).call( ... )
Run Code Online (Sandbox Code Playgroud)
我不打算做多线程但是如果不同的设置来自不同的线程怎么办?
Joh*_*ree 13
来自网站文档:
Rhino Context对象用于存储有关执行环境的特定于线程的信息.应该有一个且只有一个与每个将执行JavaScript的线程关联的Context.
换句话说,不要在线程之间传递上下文.只需在正在运行的线程中创建一个新的上下文 不要担心Context.enter()在一个帖子中多次调用.它们是有效的线程局部变量,内部引用计数.所以Context.enter()在相同的线程中调用非常轻松.
再次来自文档:
即使已经存在与当前线程关联的Context,这些调用也将正常工作.将返回该上下文并且内部计数器递增.只有当计数器达到零时才会从线程中解除关联.
就个人而言,我只是在任何地方使用此代码构造:
Context ctx = Context.enter();
try {
// do something with the ctx
} finally {
Context.exit();
}
Run Code Online (Sandbox Code Playgroud)
事实上,在Groovy中我鞭打了这个:
def withContext(Closure closure) {
Context ctx = Context.enter();
try {
closure.call(ctx);
} finally {
Context.exit();
}
}
Run Code Online (Sandbox Code Playgroud)
然后传递代码如下:
withContext { Context ctx ->
ScriptableObject scope = ctx.initStandardObjects()
// now to do work with the scope and ctx.
}
Run Code Online (Sandbox Code Playgroud)
最后一点说明.范围与上下文无关,可以在线程之间保持/传递.
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |