这里是什么,我会用做一些基本的,而不是精确的测试一个简单的例子。
首先,我们需要一些基本的方法来启动和打印时容易
public class Main {
static long start;
static void startTest(){
start = System.nanoTime();
}
static void stopTest(){
System.out.format("%012.6f ms\n",(System.nanoTime() - start)/1000000.0);
start = -1;
}
}
单线程
让我们运行在一个空的循环测试:
startTest();
for(int i = 0; i < Integer.MAX_VALUE; ++i){}
stopTest();
这将等待该在调用stopTest()
之前循环结束并打印所需的时间。
多线程
随着不同的线程,你需要等待,他们结束,这是简单,也可以不以多种方式。这里是一个:
startTest();
List<Callable<String>> list = new ArrayList();
for(int i=0;i<5;i++){
list.add(new Callable() {
public Object call() throws Exception {
for(int i = 0; i < Integer.MAX_VALUE/5; ++i){}
System.out.println("End of Thread");
return null;
}
});
}
ExecutorService es = Executors.newCachedThreadPool();
try {
es.invokeAll(list);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} finally {
stopTest();
es.shutdown();
}
有了这个Executors
,我们可以在同一时间等待他们结束调用所有Callable
。
花费在循环中的时间取决于花费在其中的方法的时间......所以问题是什么? – AxelH
可能的重复[如何在Java中编写正确的微基准测试?](http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java ) – rkosegi