最少的循环放到外面,最大的放到里面即可。
把循环次数少的放外面,多的放里面,因为越到外面,执行次数要越少,下面是具体代码,你看看
内大外小
for( int k=0k <10k++){
for(int j=0j <100j++){
for(int i=0i <1000i++){
function(i,j,k)
}
}
}
k <10k++执行10次
j <100j++ 执行10*100次
i <1000i++ 执行10*100*1000次
function(i,j,k)执行10*100*1000次
共执行语句数=(10+10*100+10*100*1000)*2+10*100*1000=3002020
内小外大
for( int k=0k <1000k++){
for(int j=0j <100j++){
for(int i=0i <10i++){
function(i,j,k)
}
}
}
k <1000k++执行1000次
j <100j++ 执行1000*100次
i <10i++ 执行10*100*1000次
function(i,j,k)执行10*100*1000次
共执行语句数=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000
所以执行效率应该是内大外小更高一些
内小外大-内大外小=3202000条语句-3002020条语句=199980条语句
那么我们要做的就是把要做的事情开多线程里去处理,可以简单的实现如下
package com.wenxy.test.baidu.zhidao.bankimport java.util.Iterator
import java.util.concurrent.Executor
import java.util.concurrent.Executors
public class TestLoop {
public static int i = 0
void doSomething() {
System.out.println(Thread.currentThread().getName()
+ " is doing。。。 and i = " + i)
i++
}
public static void main(String[] args) {
final TestLoop testLoop = new TestLoop()
// 创建一个线程池,用10个线程处理
Executor executor = Executors.newFixedThreadPool(10)
for (int i = 0 i < 100 i++) {
executor.execute(new Runnable() {
@Override
public void run() {
testLoop.doSomething()
}
})
}
}
}