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 + -
显示快捷键?