测试主线程,MapFetch.java
package com.sohu.servlet; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * @author liweihan ([email protected]) * @version 1.0 (2015年7月27日 下午2:18:47) */ public class MapFetch { static Map<String, String> map = new HashMap<String, String>(); public static void main(String[] args) { System.out.println("....test...."); map.put("1", "one"); map.put("2", "two"); map.put("3", "three"); for (int i = 0; i < 300000; i++) { map.put("key" + i, "value"+i); } //1.循环map /*Set<String> set = map.keySet(); Iterator<String> it = set.iterator(); while(it.hasNext()) { String key = (String) it.next(); String value = map.get(key); System.out.println(key + " → " + value); }*/ //2.循环map /*Set<Entry<String,String>> se = map.entrySet(); for (Entry<String,String> en : se) { System.out.println(en.getKey() + " : " + en.getValue()); }*/ //3.循环map /* Set<Entry<String, String>> set = map.entrySet(); Iterator<Entry<String, String>> iterator = set.iterator(); while (iterator.hasNext()) { Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println( key + " -- " + value); }*/ //4.合并map /*Map<String, String> map1 = new HashMap<String, String>(); map1.put("1", "one"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("2", "two"); map1.putAll(map2); System.out.println(map1);*/ //5.分割map+多线程 /* int totalSize = map.size(); System.out.println("Map totalSize : " + totalSize); //线程的数量 int threadNum = 16; //每个线程处理的数量 int threadSize = totalSize / threadNum; System.out.println("每个线程处理的数量:" + threadSize); //join()线程 List<Thread> threadList = new ArrayList<Thread>(); for (int i = 0; i < threadNum; i++) { int end; if (i == threadNum - 1) { //最后一个线程 end = threadSize + totalSize % threadNum ; } else { end = threadSize; } int beginNum = i * threadSize; int endNum = i * threadSize + end; System.out.println(i + " begin : " + beginNum + "," + endNum); int sync = 0; //分割map Map<String, String> mapThread = new HashMap<String, String>(); for(Entry<String, String> entry : map.entrySet()) { sync++; if (sync > beginNum && sync <= endNum) { mapThread.put(entry.getKey(), entry.getValue()); } } StarRelationThread st = new StarRelationThread(mapThread,map,i); Thread thread = new Thread(st); threadList.add(thread); thread.start(); } //join()线程-必须等join的线程执行完,才能继续执行下面的代码 for (Thread thread : threadList) { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } map.clear(); System.out.println("------------over---------------"); */ //6.map的分割 Iterator<Entry<String, String>> iterator = map.entrySet().iterator(); Map<String, String> mapThread0 = new HashMap<String, String>(); Map<String, String> mapThread1 = new HashMap<String, String>(); Map<String, String> mapThread2 = new HashMap<String, String>(); Map<String, String> mapThread3 = new HashMap<String, String>(); Map<String, String> mapThread4 = new HashMap<String, String>(); Map<String, String> mapThread5 = new HashMap<String, String>(); Map<String, String> mapThread6 = new HashMap<String, String>(); Map<String, String> mapThread7 = new HashMap<String, String>(); Map<String, String> mapThread8 = new HashMap<String, String>(); Map<String, String> mapThread9 = new HashMap<String, String>(); Map<String, String> mapThread10 = new HashMap<String, String>(); Map<String, String> mapThread_default = new HashMap<String, String>(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); String key = entry.getKey(); String.valueOf(key); int hashCode = Math.abs(String.valueOf(key).hashCode()); switch (hashCode % 11) {//分割成11份 case 0 : mapThread0.put(key, map.get(key)); break; case 1 : mapThread1.put(key, map.get(key)); break; case 2 : mapThread2.put(key, map.get(key)); break; case 3 : mapThread3.put(key, map.get(key)); break; case 4 : mapThread4.put(key, map.get(key)); break; case 5 : mapThread5.put(key, map.get(key)); break; case 6 : mapThread6.put(key, map.get(key)); break; case 7 : mapThread7.put(key, map.get(key)); break; case 8 : mapThread8.put(key, map.get(key)); break; case 9 : mapThread9.put(key, map.get(key)); break; case 10 : mapThread10.put(key, map.get(key)); break; default: mapThread_default.put(key, map.get(key)); break; } } System.out.println(mapThread0.size()); System.out.println(mapThread1.size()); System.out.println(mapThread2.size()); System.out.println(mapThread3.size()); System.out.println(mapThread4.size()); System.out.println(mapThread5.size()); System.out.println(mapThread6.size()); System.out.println(mapThread7.size()); System.out.println(mapThread8.size()); System.out.println(mapThread9.size()); System.out.println(mapThread10.size()); System.out.println(mapThread_default.size()); int a = mapThread0.size() + mapThread1.size() + mapThread2.size() + mapThread3.size() + mapThread4.size() + mapThread5.size() + mapThread6.size() + mapThread7.size() + mapThread8.size() + mapThread9.size() + mapThread10.size() + mapThread_default.size(); System.out.println("a:" + a); } }
业务处理子线程StarRelationThread.java
package com.sohu.servlet; import java.util.Map; import java.util.Map.Entry; /** * @author liweihan ([email protected]) * @version 1.0 (2015年7月27日 下午3:47:09) */ public class StarRelationThread implements Runnable{ private Map<String, String> mapThread ; private Map<String, String> map ; private int threadNum; public StarRelationThread(Map<String, String> mapThread ,Map<String, String> map,int threadNum) { this.map = map; this.threadNum = threadNum; this.mapThread = mapThread; } @Override public void run() { System.out.println(" 第 " + threadNum + " 个线程处理-开始 ,此线程处理的数量 " + mapThread.size() + ",总的数量为:"+map.size()); System.out.println("处理数据 ,并写入redis中"); if (threadNum > 3) { try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } } int sync = 0; for (Entry<String, String> en : mapThread.entrySet()) { sync++; if (sync < 2) { System.out.println("key :" + en.getKey() + ", value :" + en.getValue()); } } System.out.println(" 第 " + threadNum + " 个线程执行完毕!"); } }