上上一篇對linkedList和arrayList的源碼對比:http://blog.csdn.net/aaashen/article/details/44925181
上一篇對linkedList和arrayList的各種方法進行單線程的對比:http://blog.csdn.net/aaashen/article/details/45011365
本篇用多線程對比,之對比add方法,插10000000條數據。
其中arrayList add 數據花費11615,linkedlist add數據花費4395。
import java.util.ArrayList;
import java.util.LinkedList;
/**
* Created by aaashen on 2015/4/8.
*/
public class list_Runnable implements Runnable{
private ArrayList alist = new ArrayList<Integer>();
private LinkedList llist = new LinkedList<Integer>();
public int n = 10000000;
//同步
private void addAlist()
{
while(n>0){
synchronized(alist){
alist.add(n);
n--;
}
// System.out.println(Thread.currentThread().getName()+" of "+Thread.currentThread().getThreadGroup().getName()+"add"+n);
}
}
private void addLlist()
{
while(n>0){
synchronized(llist){
llist.add(n);
n--;
}
// System.out.println(Thread.currentThread().getName()+" of "+Thread.currentThread().getThreadGroup().getName()+"add"+n);
}
}
@Override
public void run() {
addAlist();
// addLlist();
}
public static void main(String args[]){
long costTime = 0;
long startTime = 0;
long endTime = 0;
//創建一個線程組group,加入3個線程,分別爲每一個線程命名
list_Runnable ar= new list_Runnable();
ThreadGroup theGroup=new ThreadGroup("group1");
Thread thread0 = new Thread(theGroup,ar,"thread0");
Thread thread1 = new Thread(theGroup,ar,"thread1");
Thread thread2 = new Thread(theGroup,ar,"thread2");
//開始計時
startTime = System.currentTimeMillis();
thread0.start();
thread1.start();
thread2.start();
while(true){
// System.out.println("theGroup.activeCount number: "+theGroup.activeCount());
if(theGroup.activeCount()==0){
endTime = System.currentTimeMillis();//結束計時
break;
}
}
System.out.println("共耗時"+(endTime-startTime));
}
}