- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有人了解 rhino 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( ... )
我不打算使用多线程,但如果不同的设置来自不同的线程怎么办?
最佳答案
来自website docs :
The Rhino Context object is used to store thread-specific information about the execution environment. There should be one and only one Context associated with each thread that will be executing JavaScript.
换句话说,不要在线程之间传递上下文。只需在运行的线程中创建一个新的上下文。不要担心在一个线程中多次调用 Context.enter()
。它们实际上是内部引用计数的线程局部变量。所以在同一个线程中调用 Context.enter()
是非常轻量级的。
再次来自docs :
These calls will work properly even if there is already a Context associated with the current thread. That context will be returned and an internal counter incremented. Only when the counter reaches zero will it be disassociated from the thread.
就我个人而言,我到处都使用这个代码结构:
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.
}
最后一点。作用域与上下文无关,可以在线程之间持久化/传递。
关于java - 犀牛嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063331/
我知道我能做到: IDateTimeFactory dtf = MockRepository.GenerateStub(); dtf.Now = new DateTime(); DoStuff(dtf
我有一段嵌入了 Rhino 的 Java 代码(省略了不相关的位): Context cx = Context.enter(); Scriptable scope = cx.initStandardO
我正在研究 Rhino (Mirth),我必须处理/解析具有以下结构的 XML: ... ... 我只想获取所有“foo”节点,尽可能避免使用循环。我一直在尝试类似的东西:
我是一名优秀的程序员,十分优秀!