content: /**
   * http://blog.csdn.net/sunxianghuang/article/details/52221913 
   * http://www.educity.cn/java/498061.html
   * �Ķ�concurrentskiplistmap
   */
  package thread.example02.c_025;
  
  import java.util.Arrays;
  import java.util.Map;
  import java.util.Random;
  import java.util.concurrent.ConcurrentSkipListMap;
  import java.util.concurrent.CountDownLatch;
  
  public class T01_ConcurrentMap {
  	public static void main(String[] args) {
  		//Map<String, String> map = new ConcurrentHashMap<>();
  		Map<String, String> map = new ConcurrentSkipListMap<>(); //�߲�����������
  		
  		//Map<String, String> map = new Hashtable<>();
  		//Map<String, String> map = new HashMap<>(); //Collections.synchronizedXXX
  		//TreeMap
  		Random r = new Random();
  		Thread[] ths = new Thread[100];
  		CountDownLatch latch = new CountDownLatch(ths.length);
  		long start = System.currentTimeMillis();
  		for(int i=0; i<ths.length; i++) {
  			ths[i] = new Thread(()->{
  				for(int j=0; j<10000; j++) map.put("a" + r.nextInt(100000), "a" + r.nextInt(100000));
  				latch.countDown();
  			});
  		}
  		
  		Arrays.asList(ths).forEach(t->t.start());
  		try {
  			latch.await();
  		} catch (InterruptedException e) {
  			e.printStackTrace();
  		}
  		
  		long end = System.currentTimeMillis();
  		System.out.println(end - start);
  	}
  }
  