distributedhashdeadlock.java
来自「JGRoups源码」· Java 代码 · 共 93 行
JAVA
93 行
package org.jgroups.tests;import org.jgroups.ChannelException;import org.jgroups.blocks.DistributedHashtable;import org.jgroups.util.Util;/** * Title: Java Groups Communications * Description: Contact me at <a href="mailto:filip@filip.net">filip@filip.net</a> * Copyright: Copyright (c) 2002 * Company: www.filip.net * @author Filip Hanik * @version 1.0 */public class DistributedHashDeadLock { public DistributedHashDeadLock() { } public static void main(String arg[]) throws ChannelException { System.out.println("Starting hashtable"); String props="UDP(mcast_addr=224.0.0.35;mcast_port=45566;ip_ttl=32;mcast_send_buf_size=150000;mcast_recv_buf_size=80000):" + "PING(timeout=2000;num_initial_members=3):" + "MERGE2:" + "FD:" + "VERIFY_SUSPECT(timeout=1500):" + "pbcast.NAKACK(max_xmit_size=16000;gc_lag=1500;retransmit_timeout=600,1200,2400,4800):" + "UNICAST(timeout=2000):" + "pbcast.STABLE(desired_avg_gossip=20000):" + "FRAG(frag_size=16000;down_thread=false;up_thread=false):" + "pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true):" + "pbcast.STATE_TRANSFER"; DistributedHashtable distHash=new DistributedHashtable("ADMINT", null, props, 20000); boolean odd=false; int numberofelements=1000; Util.sleep(5000); System.out.println("size: " + distHash.size()); if(distHash.size() > 0)//The first instance counts up when numbers are even { //The second when numbers are odd odd=true; } boolean fillup=false; if(!odd) System.out.println("Loading hashtable with " + numberofelements + " elements. Don't start the other instance"); for(int i=0; !odd && i < numberofelements; i++)//if the table isn't full we fill it { if(i % 50 == 0) System.out.print(i + " "); distHash.put("number" + i, new Integer(0)); fillup=true; } if(fillup) System.out.println("\n\nHashtable filled, you can now start the other instance\n"); System.out.println("initilising with odd: " + odd + " and size " + distHash.size()); while(true) { try { System.out.println("#######################################################"); Thread.sleep(10000); int count=0; for(int i=0; i < numberofelements; i++) { int value=((Integer)distHash.get("number" + i)).intValue(); System.out.print(value + " "); if(i % 50 == 0) System.out.print("\n"); if(odd && (value % 2 != 0))//If the number is odd, and the instance is supposed to count odd numbers up { count++; value++; distHash.put("number" + i, new Integer(value)); continue; } if(!odd && (value % 2 == 0))//If the number is even, and the instance is supposed to count even numbers up { count++; value++; distHash.put("number" + i, new Integer(value)); continue; } } System.out.println("\n" + odd + " through all session, changed: " + count); } catch(Exception e) { e.printStackTrace(); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?