deadlocktest.java

来自「JGRoups源码」· Java 代码 · 共 102 行

JAVA
102
字号
// $Id: DeadlockTest.java,v 1.7 2006/02/28 16:32:11 belaban Exp $package org.jgroups.tests;import org.jgroups.*;import org.jgroups.blocks.GroupRequest;import org.jgroups.blocks.MethodCall;import org.jgroups.blocks.RpcDispatcher;/** * Class which tests deadlock detection in RequestCorrelator. * @author John Giorgiadis */public class DeadlockTest {    private static final Class[] TYPES=new Class[]{};    private static final Object[] ARGS=new Object[]{};    public class InRpc {        public void rpc_1() { _in_rpc_1(); }        public void rpc_2() { _in_rpc_2(); }    }	private static class Handler implements MessageListener, MembershipListener {		public Handler() { super(); }		// MessageListener		public byte[] getState() { return(null); }		public void setState(byte[] state) {}		public void receive(Message msg) {}		// MembershipListener		public void block() {}		public void suspect(Address suspect) {}		public void viewAccepted(View view) {}	}	// .......................................................................	private String name = "JG";	private String stack = null; // default stack config	private JChannel channel;	private RpcDispatcher disp;	private void _in_rpc_1() {		System.out.println("In rpc_1()");		cast_call("rpc_2", ARGS, TYPES);		System.out.println("Exiting rpc_1()");	}	private void _in_rpc_2() {		System.out.println("In rpc_2()");		System.out.println("Exiting rpc_2()");	}	private void cast_call(String method, Object[] args, Class[] types) {		MethodCall call;		call = new MethodCall(method, args, types);		disp.callRemoteMethods(null, call, GroupRequest.GET_ALL, 0);	}	// .......................................................................	public DeadlockTest(boolean use_deadlock_detection) {		Handler handler = new Handler();		InRpc in_rpc = new InRpc();		try {		    channel = new JChannel(stack);		    disp = new RpcDispatcher(channel, handler, handler, in_rpc, use_deadlock_detection);		    channel.connect(name);		}         catch(ChannelClosedException ex) { ex.printStackTrace(); }        catch(ChannelException ex) { ex.printStackTrace(); }				// Call rpc_1 which in turn calls rpc_2		System.out.println("Calling rpc_1()");		if(!use_deadlock_detection)		    System.out.println("** Not using deadlock detection -- recursive call will hang !");		else		    System.out.println("** Using deadlock detection -- recursive call will succeed");		cast_call("rpc_1", ARGS, TYPES);		System.out.println("Out of rpc_1()");		channel.disconnect();		channel.close();		System.out.println("Disconnected");	}	// .......................................................................	public static void main(String[] args) {	    if(args.length != 1) {		System.out.println("DeadlockTest <true|false (use_deadlock_detection)>");		return;	    }	    new DeadlockTest(Boolean.valueOf(args[0]).booleanValue());	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?