このコードはスレッドセーフですか?
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;
}