public class SingleThread implements Runnable { ... }
public static void main(String[] args)
{
ExecutorService parallelTest = Executors.newFixedThreadPool(10);
for(int i=0; i<1; i++){
System.out.println("Thread " + i + " launching now");
parallelTest.execute(new SingleThread());
}
parallelTest.shutdown();
}
用以上方法可以实现对指定类的并发执行,但是需要事先知道类名。如何对一组事先不知道的类名通过这个方法来并发执行呢?
即有 n个不同的实现了runnable的类,就像一个测试类列表,通过以上或类似的方法来实现并发执行呢?
望赐教,谢谢。
[code="java"]
public class SingleThread implements Runnable { ... }
String[] list ={"c1","c2","c3", "c4"};
ExecutorService parallelTest = Executors.newFixedThreadPoo(list.length);
for(int i=0;i<list.length;i++){
Class cls = Class.forName(list[i]);
Object service=cls.newInstance(obj);
//此处需将Object强制转型为Runnable
parallelTest.execute((Runnable)service);
}
[/code]
假设你的测试类列表为List rList
那么可以这样
[code="java"]for(Runnable test : rList){
parallelTest.execute(test);
}[/code]
这样不就行了。
[code="java"]
//你要运行的类
public class SingleThread implements Runnable { ... }
//通用的线程执行程序
String[] clss={"a","b","c"};
ExecutorService parallelTest = Executors.newFixedThreadPoo(clss.length);
for(int i=0;i<clss.length;i++){
Class cls = Class.forName(clss[i]);
Object service=cls.newInstance(obj);
parallelTest.execute(service);
}
[/code]
使用反射技术即可:
[code="java"]
public class SingleThread implements Runnable { ... }
String[] list ={"c1","c2","c3", "c4"};
ExecutorService parallelTest = Executors.newFixedThreadPoo(clss.length);
for(int i=0;i<list.length;i++){
Class cls = Class.forName(list[i]);
Object service=cls.newInstance(obj);
//此处需将Object强制转型为Runnable
parallelTest.execute((Runnable)service);
}
[/code]