2008-03-22
Rhino JavaScript---Scope与Context的含义
1、Contexts
用来存储线程特定的相关信息,也就是执行环境。
每个线程有且只有一个Context,用来执行javascript。
Context为了关联当前线程,用
Context cx = Context.enter();
javascript执行之后,用
Context.exit();
来退出。而且必须放在finally块中。
enter/exit是基于引用计数的,每引用一次,则计数器加1,当计数器为0,则取消与当前线程的关联。
2、Scopes
Scope是javascript对象的集合。
执行javascript要求一个scope,用来存储顶层的脚本变量。也是找标准对象的地方。
Scope是独立于Context的。
你可以同时的在多线程中执行同一个scope。
你可以在一个context中创建scope,然后你可以在另一个context中执行该scope的脚本。
Rhina保证访问javascript对象的属性是原子的。但不保证同时的使用相同的scope执行脚本。
如果两个脚本同时的使用相同的scope,脚本要复杂协调共享变量。
也就是说读是原子的,写就不是。
顶层scope(top-level scope)用Context.initStandardObjects来创建所有标准对象:
ScriptableObject scope = cx.initStandardObjects();
最方便的方法就是你需要scope的时候使用上面的方法来创建scope。
但是initStandardObjects方法是非常昂贵的,它需要分配大量内存。
下面说明怎么在多线程和多scope中共享scope。
用来存储线程特定的相关信息,也就是执行环境。
每个线程有且只有一个Context,用来执行javascript。
Context为了关联当前线程,用
Context cx = Context.enter();
javascript执行之后,用
Context.exit();
来退出。而且必须放在finally块中。
enter/exit是基于引用计数的,每引用一次,则计数器加1,当计数器为0,则取消与当前线程的关联。
2、Scopes
Scope是javascript对象的集合。
执行javascript要求一个scope,用来存储顶层的脚本变量。也是找标准对象的地方。
Scope是独立于Context的。
你可以同时的在多线程中执行同一个scope。
你可以在一个context中创建scope,然后你可以在另一个context中执行该scope的脚本。
Rhina保证访问javascript对象的属性是原子的。但不保证同时的使用相同的scope执行脚本。
如果两个脚本同时的使用相同的scope,脚本要复杂协调共享变量。
也就是说读是原子的,写就不是。
顶层scope(top-level scope)用Context.initStandardObjects来创建所有标准对象:
ScriptableObject scope = cx.initStandardObjects();
最方便的方法就是你需要scope的时候使用上面的方法来创建scope。
但是initStandardObjects方法是非常昂贵的,它需要分配大量内存。
下面说明怎么在多线程和多scope中共享scope。
- 00:13
- 浏览 (292)
- 评论 (0)
- 分类: Java技术
- 发布在 javascript研究小组 圈子
- 相关推荐
发表评论
- 浏览: 64426 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
最新评论
-
JavaEye之路
引用我也很喜欢JavaEye,比CSDN好 CSDN太杂了规模大了能不大而全吗? ...
-- by Sam1860 -
JavaEye之路
我在这,随便说点啥,博客,论坛,都说我应该是一个新手的帖子。不过我还是呆在这。反 ...
-- by saharabear -
我是穷忙族
-- by lbyzx123 -
JavaEye之路
javaeye目前的问题: 1,缺乏一个好的盈利模式,商业化运作 2,技术定位 ...
-- by kimmking -
JavaEye之路
我也很喜欢JavaEye,比CSDN好 CSDN太杂了
-- by lovefly_zero






评论排行榜