Groovy线程安全

时间:2014-12-19 09:43:34

标签: multithreading groovy

我在多线程模式下使用groovy脚本执行。 脚本本身是线程安全的。

如下所示: //启动代码单线程

Class<?> scriptClass = getScriptClass(fileName); //utility to get script class from file name
Method method = getMethods(scriptClass); //Utility to get a specific Method
storeMethod(method); //Store method globally.
Object scriptInstance = scriptClass.newInstance();
storeScriptInstance(scriptInstance); //Store script Instance

多个线程执行以下代码:(没有任何同步。)

ScriptInstance scriptInstance = getScriptInstance(); //Utility to get scriptInstance stored in init
Method method = getMethod(); //Utility for getting method stored in init step
Object obj[] = new Object[] { context }; //context variable available per thread.
method.invoke(scriptInstance,obj);

脚本只包含一个完全线程安全的函数(函数是可重入的并且修改了上下文变量。)

这适用于我使用多线程进行单元测试但无法找到支持此声明的任何材料。 问题=&gt;在多线程执行下是否安全?更一般地说,跨线程共享相同的脚本实例来执行本身是线程安全的脚本函数是安全的吗?脚本实例不应该有执行中的全局变量。 Context是脚本的参数,而不是全局变量。

请帮忙。

1 个答案:

答案 0 :(得分:1)

如果没有实际的功能,我无法判断这是否应该是线程安全的。既然你说函数修改了上下文变量,我得出结论你改变了全局状态。在这种情况下,如果没有某种同步,它就不是线程安全的。如果我的假设是错误的并且没有突变全局状态,那么通过反射执行方法肯定不是问题