condvartest.java
来自「JGRoups源码」· Java 代码 · 共 153 行
JAVA
153 行
// $Id: CondVarTest.java,v 1.3 2005/07/26 18:36:00 belaban Exp $package org.jgroups.tests;import EDU.oswego.cs.dl.util.concurrent.FutureResult;import EDU.oswego.cs.dl.util.concurrent.TimeoutException;import junit.framework.TestCase;import org.jgroups.util.Util;import org.jgroups.util.CondVar;import java.lang.reflect.InvocationTargetException;import java.util.HashMap;import java.util.Map;/** * Various test cases for CondVar * @author Bela Ban */public class CondVarTest extends TestCase { CondVar cond=new CondVar("blocking", Boolean.FALSE); public CondVarTest(String name) { super(name); } public void setUp() throws Exception { super.setUp(); } public void tearDown() throws Exception { super.tearDown(); } public void testConditionTrue() { try { cond.waitUntilWithTimeout(Boolean.FALSE, 500); } catch(org.jgroups.TimeoutException e) { fail("received TimeoutException"); } } public void testConditionTrueWaitForever() { cond.waitUntil(Boolean.FALSE); } public void testWithTimeoutException() { try { cond.waitUntilWithTimeout(Boolean.TRUE, 500); fail("expected timeout exception"); } catch(org.jgroups.TimeoutException e) { } } public void testWithResultSetter() throws org.jgroups.TimeoutException { new ResultSetter(cond, 500).start(); cond.waitUntilWithTimeout(Boolean.TRUE, 2000); } public void testWithResultSetter_ResultSetBeforeAccess() throws org.jgroups.TimeoutException { new ResultSetter(cond, 10).start(); Util.sleep(100); cond.waitUntilWithTimeout(Boolean.TRUE, 2000); } public void testDoubleLocking() throws org.jgroups.TimeoutException { final Map m=new HashMap(); final CondVar c=new CondVar("bla", Boolean.FALSE, m); new Thread() { public void run() { Util.sleep(1000); _setValue(m, c); } }.start(); _enterMonitor(m, c); } private void _setValue(Map m, CondVar c) { log("acquiring m"); synchronized(m) { log("acquired m. setting c"); c.set(Boolean.TRUE); log("set c. released c"); } log("released m"); } private void _enterMonitor(final Map m, final CondVar c) throws org.jgroups.TimeoutException { log("acquiring m"); synchronized(m) { log("acquired m. acquiring and waiting on c"); c.waitUntilWithTimeout(Boolean.TRUE, 10000); log("released c"); } log("released m"); } private void log(String msg) { System.out.println(System.currentTimeMillis() + " " + Thread.currentThread() + " - " + msg); } public void testStressOnGet() { long start, stop; long NUM=1000000L; start=System.currentTimeMillis(); for(int i=0; i < NUM; i++) { if(cond.get().equals(Boolean.TRUE)) ; } stop=System.currentTimeMillis(); long diff=stop-start; diff*=1000; // microsecs double microsecs_per_get=diff / (double)NUM; System.out.println("took " + microsecs_per_get + " microsecs/get for " + NUM + " gets (" + diff + " microsecs)"); } class ResultSetter extends Thread { long wait_time=2000; CondVar target=null; ResultSetter(CondVar target, long wait_time) { this.target=target; this.wait_time=wait_time; } public void run() { Util.sleep(wait_time); System.out.println("-- [ResultSetter] set result to true"); target.set(Boolean.TRUE); System.out.println("-- [ResultSetter] set result to true -- DONE"); } } public static void main(String[] args) { String[] testCaseName={CondVarTest.class.getName()}; junit.textui.TestRunner.main(testCaseName); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?