/** * Get instance of specified AbortProvoker, inflate associated monitor if needed and then invoke * forceAbort method in a loop. * * <p>Usage: AbortProvoker <AbortType name> [<inflate monitor> [<iterations> [ * <delay>]]] * * <p>Default parameters are: * * <ul> * <li>inflate monitor = <b>true</b> * <li>iterations = {@code AbortProvoker.DEFAULT_ITERATIONS} * <li>delay = <b>0</b> * </ul> */ public static void main(String args[]) throws Throwable { Asserts.assertGT(args.length, 0, "At least one argument is required."); AbortType abortType = AbortType.lookup(Integer.valueOf(args[0])); boolean monitorShouldBeInflated = true; long iterations = AbortProvoker.DEFAULT_ITERATIONS; if (args.length > 1) { monitorShouldBeInflated = Boolean.valueOf(args[1]); if (args.length > 2) { iterations = Long.valueOf(args[2]); if (args.length > 3) { Thread.sleep(Integer.valueOf(args[3])); } } } AbortProvoker provoker = abortType.provoker(); if (monitorShouldBeInflated) { provoker.inflateMonitor(); } for (long i = 0; i < iterations; i++) { AbortProvoker.verifyMonitorState(provoker, monitorShouldBeInflated); provoker.forceAbort(); } }
/** * Usage: BusyLock [ <inflate monitor> [ <timeout> ] ] * * <p>Default values are: * * <ul> * <li>inflate monitor = {@code true} * <li>timeout = {@code BusyLock.DEFAULT_TIMEOUT} * </ul> */ public static void main(String args[]) throws Exception { int timeoutValue = BusyLock.DEFAULT_TIMEOUT; boolean inflateMonitor = true; if (args.length > 0) { inflateMonitor = Boolean.valueOf(args[0]); if (args.length > 1) { timeoutValue = Integer.valueOf(args[1]); } } BusyLock busyLock = new BusyLock(timeoutValue); if (inflateMonitor) { AbortProvoker.inflateMonitor(busyLock.monitor); } Thread t = new Thread(busyLock); t.start(); busyLock.test(); t.join(); }
/** * Inflates monitor used by this AbortProvoker instance. * * @throws Exception */ public void inflateMonitor() throws Exception { AbortProvoker.inflateMonitor(monitor); }