測試主線程,MapFetch.java
<code>package</code> <code>com.sohu.servlet;</code>
<code>import</code> <code>java.util.ArrayList;</code>
<code>import</code> <code>java.util.HashMap;</code>
<code>import</code> <code>java.util.Iterator;</code>
<code>import</code> <code>java.util.List;</code>
<code>import</code> <code>java.util.Map;</code>
<code>import</code> <code>java.util.Map.Entry;</code>
<code>import</code> <code>java.util.Set;</code>
<code>/**</code>
<code> </code><code>* @author liweihan ([email protected])</code>
<code> </code><code>* @version 1.0 (2015年7月27日 下午2:18:47)</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>MapFetch {</code>
<code> </code><code>static</code> <code>Map<String, String> map = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code>
<code> </code><code>System.out.println(</code><code>"....test...."</code><code>);</code>
<code> </code><code>map.put(</code><code>"1"</code><code>, </code><code>"one"</code><code>);</code>
<code> </code><code>map.put(</code><code>"2"</code><code>, </code><code>"two"</code><code>);</code>
<code> </code><code>map.put(</code><code>"3"</code><code>, </code><code>"three"</code><code>);</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i < </code><code>300000</code><code>; i++) {</code>
<code> </code><code>map.put(</code><code>"key"</code> <code>+ i, </code><code>"value"</code><code>+i);</code>
<code> </code><code>}</code>
<code> </code><code>//1.循環map</code>
<code> </code><code>/*Set<String> set = map.keySet();</code>
<code> </code><code>Iterator<String> it = set.iterator();</code>
<code> </code><code>while(it.hasNext()) {</code>
<code> </code><code>String key = (String) it.next();</code>
<code> </code><code>String value = map.get(key);</code>
<code> </code><code>System.out.println(key + " → " + value);</code>
<code> </code><code>}*/</code>
<code> </code><code>//2.循環map</code>
<code> </code><code>/*Set<Entry<String,String>> se = map.entrySet();</code>
<code> </code><code>for (Entry<String,String> en : se) {</code>
<code> </code><code>System.out.println(en.getKey() + " : " + en.getValue());</code>
<code> </code><code>//3.循環map</code>
<code>/* Set<Entry<String, String>> set = map.entrySet();</code>
<code> </code><code>Iterator<Entry<String, String>> iterator = set.iterator();</code>
<code> </code><code>while (iterator.hasNext()) {</code>
<code> </code><code>Entry<String, String> entry = iterator.next();</code>
<code> </code><code>String key = entry.getKey();</code>
<code> </code><code>String value = entry.getValue();</code>
<code> </code><code>System.out.println( key + " -- " + value);</code>
<code> </code><code>//4.合并map</code>
<code> </code><code>/*Map<String, String> map1 = new HashMap<String, String>();</code>
<code> </code><code>map1.put("1", "one");</code>
<code> </code><code>Map<String, String> map2 = new HashMap<String, String>();</code>
<code> </code><code>map2.put("2", "two");</code>
<code> </code><code>map1.putAll(map2);</code>
<code> </code><code>System.out.println(map1);*/</code>
<code> </code><code>//5.分割map+多線程</code>
<code>/* int totalSize = map.size();</code>
<code> </code><code>System.out.println("Map totalSize : " + totalSize);</code>
<code> </code><code>//線程的數量</code>
<code> </code><code>int threadNum = 16;</code>
<code> </code><code>//每個線程處理的數量</code>
<code> </code><code>int threadSize = totalSize / threadNum;</code>
<code> </code><code>System.out.println("每個線程處理的數量:" + threadSize);</code>
<code> </code><code>//join()線程</code>
<code> </code><code>List<Thread> threadList = new ArrayList<Thread>();</code>
<code> </code><code>for (int i = 0; i < threadNum; i++) {</code>
<code> </code><code>int end;</code>
<code> </code><code>if (i == threadNum - 1) {</code>
<code> </code><code>//最後一個線程</code>
<code> </code><code>end = threadSize + totalSize % threadNum ;</code>
<code> </code><code>} else {</code>
<code> </code><code>end = threadSize;</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>int beginNum = i * threadSize;</code>
<code> </code><code>int endNum = i * threadSize + end;</code>
<code> </code><code>System.out.println(i + " begin : " + beginNum + "," + endNum);</code>
<code> </code><code>int sync = 0;</code>
<code> </code><code>//分割map</code>
<code> </code><code>Map<String, String> mapThread = new HashMap<String, String>();</code>
<code> </code><code>for(Entry<String, String> entry : map.entrySet()) {</code>
<code> </code><code>sync++;</code>
<code> </code><code>if (sync > beginNum && sync <= endNum) {</code>
<code> </code><code>mapThread.put(entry.getKey(), entry.getValue());</code>
<code> </code><code>}</code>
<code> </code><code>StarRelationThread st = new StarRelationThread(mapThread,map,i);</code>
<code> </code><code>Thread thread = new Thread(st);</code>
<code> </code><code>threadList.add(thread);</code>
<code> </code><code>thread.start();</code>
<code> </code><code>//join()線程-必須等join的線程執行完,才能繼續執行下面的代碼</code>
<code> </code><code>for (Thread thread : threadList) {</code>
<code> </code><code>try {</code>
<code> </code><code>thread.join();</code>
<code> </code><code>} catch (InterruptedException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>map.clear();</code>
<code> </code><code>System.out.println("------------over---------------");</code>
<code>*/</code>
<code> </code><code>//6.map的分割</code>
<code> </code><code>Iterator<Entry<String, String>> iterator = map.entrySet().iterator();</code>
<code> </code><code>Map<String, String> mapThread0 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread1 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread2 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread3 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread4 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread5 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread6 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread7 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread8 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread9 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread10 = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Map<String, String> mapThread_default = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>while</code> <code>(iterator.hasNext()) {</code>
<code> </code><code>Map.Entry<String, String> entry = iterator.next();</code>
<code> </code><code>String.valueOf(key);</code>
<code> </code><code>int</code> <code>hashCode = Math.abs(String.valueOf(key).hashCode());</code>
<code> </code><code>switch</code> <code>(hashCode % </code><code>11</code><code>) {</code><code>//分割成11份</code>
<code> </code><code>case</code> <code>0</code> <code>:</code>
<code> </code><code>mapThread0.put(key, map.get(key));</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>case</code> <code>1</code> <code>:</code>
<code> </code><code>mapThread1.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>2</code> <code>:</code>
<code> </code><code>mapThread2.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>3</code> <code>:</code>
<code> </code><code>mapThread3.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>4</code> <code>:</code>
<code> </code><code>mapThread4.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>5</code> <code>:</code>
<code> </code><code>mapThread5.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>6</code> <code>:</code>
<code> </code><code>mapThread6.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>7</code> <code>:</code>
<code> </code><code>mapThread7.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>8</code> <code>:</code>
<code> </code><code>mapThread8.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>9</code> <code>:</code>
<code> </code><code>mapThread9.put(key, map.get(key));</code>
<code> </code><code>case</code> <code>10</code> <code>:</code>
<code> </code><code>mapThread10.put(key, map.get(key));</code>
<code> </code><code>default</code><code>:</code>
<code> </code><code>mapThread_default.put(key, map.get(key));</code>
<code> </code><code>System.out.println(mapThread0.size());</code>
<code> </code><code>System.out.println(mapThread1.size());</code>
<code> </code><code>System.out.println(mapThread2.size());</code>
<code> </code><code>System.out.println(mapThread3.size());</code>
<code> </code><code>System.out.println(mapThread4.size());</code>
<code> </code><code>System.out.println(mapThread5.size());</code>
<code> </code><code>System.out.println(mapThread6.size());</code>
<code> </code><code>System.out.println(mapThread7.size());</code>
<code> </code><code>System.out.println(mapThread8.size());</code>
<code> </code><code>System.out.println(mapThread9.size());</code>
<code> </code><code>System.out.println(mapThread10.size());</code>
<code> </code><code>System.out.println(mapThread_default.size());</code>
<code> </code><code>int</code> <code>a = mapThread0.size() + </code>
<code> </code><code>mapThread1.size() +</code>
<code> </code><code>mapThread2.size() +</code>
<code> </code><code>mapThread3.size() +</code>
<code> </code><code>mapThread4.size() +</code>
<code> </code><code>mapThread5.size() +</code>
<code> </code><code>mapThread6.size() +</code>
<code> </code><code>mapThread7.size() +</code>
<code> </code><code>mapThread8.size() +</code>
<code> </code><code>mapThread9.size() +</code>
<code> </code><code>mapThread10.size() +</code>
<code> </code><code>mapThread_default.size();</code>
<code> </code><code>System.out.println(</code><code>"a:"</code> <code>+ a);</code>
<code> </code><code>}</code>
<code>}</code>
業務處理子線程StarRelationThread.java
<code> </code><code>* @version 1.0 (2015年7月27日 下午3:47:09)</code>
<code>public</code> <code>class</code> <code>StarRelationThread </code><code>implements</code> <code>Runnable{</code>
<code> </code>
<code> </code><code>private</code> <code>Map<String, String> mapThread ;</code>
<code> </code><code>private</code> <code>Map<String, String> map ;</code>
<code> </code><code>private</code> <code>int</code> <code>threadNum;</code>
<code> </code><code>public</code> <code>StarRelationThread(Map<String, String> mapThread ,Map<String, String> map,</code><code>int</code> <code>threadNum) {</code>
<code> </code><code>this</code><code>.map = map;</code>
<code> </code><code>this</code><code>.threadNum = threadNum;</code>
<code> </code><code>this</code><code>.mapThread = mapThread;</code>
<code> </code><code>@Override</code>
<code> </code><code>public</code> <code>void</code> <code>run() {</code>
<code> </code><code>System.out.println(</code><code>" 第 "</code> <code>+ threadNum + </code><code>" 個線程處理-開始 ,此線程處理的數量 "</code> <code>+ mapThread.size() + </code><code>",總的數量為:"</code><code>+map.size());</code>
<code> </code><code>System.out.println(</code><code>"處理資料 ,并寫入redis中"</code><code>);</code>
<code> </code><code>if</code> <code>(threadNum > </code><code>3</code><code>) {</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>Thread.sleep(</code><code>20000</code><code>);</code>
<code> </code><code>} </code><code>catch</code> <code>(InterruptedException e) {</code>
<code> </code><code>int</code> <code>sync = </code><code>0</code><code>;</code>
<code> </code><code>for</code> <code>(Entry<String, String> en : mapThread.entrySet()) {</code>
<code> </code><code>sync++;</code>
<code> </code><code>if</code> <code>(sync < </code><code>2</code><code>) {</code>
<code> </code><code>System.out.println(</code><code>"key :"</code> <code>+ en.getKey() + </code><code>", value :"</code> <code>+ en.getValue());</code>
<code> </code><code>System.out.println(</code><code>" 第 "</code> <code>+ threadNum + </code><code>" 個線程執行完畢!"</code><code>);</code>
本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1680036,如需轉載請自行聯系原作者