2010-01-14 7 views
5

¿Alguien entiende el rhino javascript Contexts? No puedo encontrar ninguna documentación útil al respecto. Mi principal problema es el Context.exit() (¿realmente debería ser cx.exit()) que por lo que entiendo sale del contexto asociado con el hilo actual? ¿Eso significa que necesito hacer un seguimiento de lo que hace el hilo?incrustación de rinoceronte

hilo principal:

Context cx; 
cx.evaluateReader(...) // load some function 
start thread 2 

rosca 2:

Object o= scope.get("methodname", scope); 
((Function)o).call(...) 

No planeo hacer multihilo pero lo que si las diferentes configuraciones proviene de diferentes hilos?

Respuesta

13

Desde el website docs:

el objeto de contexto Rhino se utiliza para almacenar información de rosca específica sobre el entorno de ejecución. Debe haber un único contexto asociado a cada subproceso que ejecutará JavaScript.

En otras palabras, no pase el contexto entre los hilos. Solo crea un nuevo contexto en el hilo en ejecución. No se preocupe por llamar al Context.enter() más de una vez dentro de un hilo. Son efectivamente variables locales locales que son contadas internamente por referencia. Entonces, llamar a Context.enter() en el mismo hilo es muy light.

Una vez más desde el docs:

Estas llamadas funcionará correctamente incluso si ya existe un contexto asociado al subproceso actual. Ese contexto será devuelto y un contador interno incrementado. Solo cuando el contador llegue a cero se desasociará del hilo.

Personalmente, acabo de utilizar este código de construcción en todas partes:

Context ctx = Context.enter(); 
try { 
    // do something with the ctx 
} finally { 
    Context.exit(); 
} 

De hecho, en el maravilloso Azoté juntos esto:

def withContext(Closure closure) { 
    Context ctx = Context.enter(); 
    try { 
     closure.call(ctx); 
    } finally { 
     Context.exit(); 
    } 
} 

y luego pasarlo código como el siguiente:

withContext { Context ctx -> 
    ScriptableObject scope = ctx.initStandardObjects() 
    // now to do work with the scope and ctx. 
} 

Una última nota. El alcance no está vinculado al contexto, y puede persistir/pasarse entre hilos.

Cuestiones relacionadas