【发布时间】:2013-09-08 11:35:01
【问题描述】:
这段代码线程安全吗?
创建runnable并通过反射调用方法:
public class A {
public static void someMethod (List<VO> voList){
int endIndex=0;
for (int firstIndex = 0; firstIndex < voList.size(); ) {
endIndex = Math.min(firstIndex + threadSize, voList.size());
Runner runner = null;
try {
runner = new Runner(voList.subList(firstIndex, endIndex),
B.class.getMethod("createSomeString", D.class));
} catch (NoSuchMethodException ex) {
log.warn(ex.getMessage());
}
//start a thread
runner.start();
}
}
private static class Runner extends Thread {
private Method method;
private List<C> list;
public Runner(Method method,List<C> clist) {
this.method = method;
this.list=clist;
}
}
public void run() {
for (C vo: list) {
String xml = (String) method.invoke(null,vo);
}
}
}
我想通过反射调用一个静态方法,这个代码块线程安全吗?
public class B {
public static String createSomeString(D a) throws Exception {
return a.name;
}
}
而 D.class 是这样的普通旧 java 对象类:
public class D implements Serializable{
private String name;
}
【问题讨论】:
-
请更好地格式化您的代码以便我们阅读
-
这是一个问题吗?二?线程安全取决于方法本身,而不是反射。
-
通过反射进行方法调用与仅调用方法相比并不多或少是线程安全的。
标签: java multithreading reflection thread-safety