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