我有一个线程执行器实现,其中包装器的成本显示为非常昂贵.有一个包装类Task,定义如下:
class Task {
public Runnable r;
public Task(Runnable r) {
this.r = r;
}
public void run() {
r.run();
}
List taskList;
对于以下情况,运行时间约为800毫秒.
for (Task t : taskList) {
t.r.run();
}
而对于以下情况,它是~7000ms.
for (Task t : taskList) {
t.run();
}
它不是孤立发生的,而是发生在执行者的代码中.只是想知道是否有人暗示可能会发生什么?
对于此测试用例,传递的runnable如下:
class Tester implements Runnable {
int i;
public Tester(int i) {
this.i = i;
}
@Override
public void run() {
//System.out.println(i);
for (int j = 0; j < 1000000; j++) {
i = j;
}
}
public int getI() {
return i;
}
作为参考,代码可以在github.com/sharvanath/TempThreadPool找到.运行ThreadPoolTest以获取执行结果.现在尝试更改ThreadPool.java的第41行并查看魔法.