这段代码演示了ArrayList的线程不安全,我让3个线程分别对list加入300个字符串,最后的arr的大小为800多,大家可以测试一下,我的一次是898,一次是897,同时还学了join的用法
import java.util.ArrayList;
class ArraySafe implements Runnable
{
private ArrayList<String> array=null;
public ArraySafe(ArrayList<String> ar)
{
array=ar;
}
@Override
public void run() {
// TODO Auto-generated method stub
//每个线程加入30个自己的名字到list
for(int i=0;i<300;i++)
{
array.add(Thread.currentThread().getName());
try {
Thread.sleep((long) (100*Math.random()));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class ArrayListVectorTest {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
ArrayList<String> array=new ArrayList<String>(100);
ArraySafe as=new ArraySafe(array);
Thread t1=new Thread(as);
Thread t2=new Thread(as);
Thread t3=new Thread(as);
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(array.size());
}
}