假设有100个数据要处理 下面分别采用单线程和多线程进行来对比分析 说明采用多线程的好处
单线程的代码如下
package xiancheng;
import java.util.Vector;
/**
*
* @author Administrator
* zyyjiao@mail.ustc.edu.cn
*/
public class OneMain {
public static void main(String[] args) throws InterruptedException{
Vector<Integer> list=new Vector<Integer>(100);
for(int i=0;i<100;i++){
list.add(i);
}
long str=System.currentTimeMillis();
while(list.size()>0){
int var= list.remove(0);
Thread.sleep(100);
System.out.println(var);
}
long end=System.currentTimeMillis();
System.out.println("xiaohaowei "+(end-str)+"ms");
}
}
xiaohaowei 10920ms
多线程的代码如下
package xiancheng;
import java.util.Vector;
import java.util.concurrent.CountDownLatch;
public class MultiThread extends Thread {
static Vector<Integer> list = new Vector<Integer>(100);
static CountDownLatch count = new CountDownLatch(10);
@Override
public void run() {
while (list.size() > 0) {
try {
int val = list.remove(0);
System.out.println(val);
Thread.sleep(100);//模拟处理
} catch (Exception e) {
// 可能数组越界,这个地方只是为了说明问题,忽略错误
}
}
count.countDown(); // 删除成功减一
}
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 100; i++) {
list.add(i);
}
long start = System.currentTimeMillis();
//分别启动十个线程
for (int i = 0; i < 10; i++) {
new MultiThread().start();
}
//等待计数器的值减为零 也就是等待十个线程都执行完了以后才继续往下执行
count.await();
long end = System.currentTimeMillis();
System.out.println("消耗 " + (end - start) + " ms");
}
}
消耗 1092 ms