验证ArrayList为线程不安全以及解决方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 验证ArrayList为线程不安全以及解决方法
 * @author microsoft
 *
 */
public class ArrayListInThread implements Runnable {
	//List<String> list0=new ArrayList<String>(); //thread not safe
	List<String> list0=Collections.synchronizedList(new ArrayList<String>()); //thread safe
	public void run() {
		// TODO Auto-generated method stub
		try {
			Thread.sleep((int)(Math.random()*2));
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		list0.add(Thread.currentThread().getName());
		
		
	}
	
	public static void main(String[] args) {
		ThreadGroup group=new ThreadGroup("testGroup");
		ArrayListInThread at=new ArrayListInThread();
		for(int i=0;i<10000;i++){
			Thread th=new Thread(group,at,String.valueOf(i));
			th.start();
		}
		while (group.activeCount() > 0) {
            try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }
        System.out.println();
        System.out.println(at.list0.size());
        System.out.println(at.list0.get(0));
		
	}

}


NOTE:
java.util.Vector ----thread safe
java.util.ArrayList----thread not safe

java.util.HashSet----thread not safe

java.util.HashMap----thread not safe
java.util.HashTable-----thread safe

//converse thread-not-safe to thread-safe
List<String> list0=Collections.synchronizedList(new ArrayList<String>());

你可能感兴趣的:(java,thread,Microsoft)