common_helper/src/main/java/com/xiongyingqi/util/ConcurrencyThrottleSupport.java
protected void beforeAccess() {
        if (this.concurrencyLimit == NO_CONCURRENCY) {
            throw new IllegalStateException(
                    "Currently no invocations allowed - concurrency limit set to NO_CONCURRENCY");
        }
        if (this.concurrencyLimit > 0) {
            boolean debug = logger.isDebugEnabled();
            synchronized (this.monitor) {
                boolean interrupted = false;
                while (this.concurrencyCount >= this.concurrencyLimit) {
                    if (interrupted) {
                        throw new IllegalStateException("Thread was interrupted while waiting for invocation access, " +
                                "but concurrency limit still does not allow for entering");
                    }
                    if (debug) {
                        logger.debug("Concurrency count " + this.concurrencyCount +
                                " has reached limit " + this.concurrencyLimit + " - blocking");
                    }
                    try {
                        this.monitor.wait();
                    } catch (InterruptedException ex) {
                        // Re-interrupt current thread, to allow other threads to react.
                        Thread.currentThread().interrupt();
                        interrupted = true;
                    }
                }
                if (debug) {
                    logger.debug("Entering throttle at concurrency count " + this.concurrencyCount);
                }
                this.concurrencyCount++;
            }
        }
    }
protected void beforeAccess() {
        if (this.concurrencyLimit == NO_CONCURRENCY) {
            throw new IllegalStateException(
                    "Currently no invocations allowed - concurrency limit set to NO_CONCURRENCY");
        }
        if (this.concurrencyLimit > 0) {
            boolean debug = logger.isDebugEnabled();
            synchronized (this.monitor) {
                boolean interrupted = false;
                while (this.concurrencyCount >= this.concurrencyLimit) {
                    if (interrupted) {
                        throw new IllegalStateException("Thread was interrupted while waiting for invocation access, " +
                                "but concurrency limit still does not allow for entering");
                    }
                    if (debug) {
                        logger.debug("Concurrency count " + this.concurrencyCount +
                                " has reached limit " + this.concurrencyLimit + " - blocking");
                    }
                    try {
                        this.monitor.wait();
                    } catch (InterruptedException ex) {
                        // Re-interrupt current thread, to allow other threads to react.
                        Thread.currentThread().interrupt();
                        interrupted = true;
                    }
                }
                if (debug) {
                    logger.debug("Entering throttle at concurrency count " + this.concurrencyCount);
                }
                this.concurrencyCount++;
            }
        }
    }
protected void beforeAccess ( ) { if ( this . concurrencyLimit == NO_CONCURRENCY ) { throw new IllegalStateException ( "Currently no invocations allowed - concurrency limit set to NO_CONCURRENCY" ) ; } if ( this . concurrencyLimit > 0 ) { boolean debug = logger . isDebugEnabled ( ) ; synchronized ( this . monitor ) { boolean interrupted = false ; while ( this . concurrencyCount >= this . concurrencyLimit ) { if ( interrupted ) { throw new IllegalStateException ( "Thread was interrupted while waiting for invocation access, " + "but concurrency limit still does not allow for entering" ) ; } if ( debug ) { logger . debug ( "Concurrency count " + this . concurrencyCount + " has reached limit " + this . concurrencyLimit + " - blocking" ) ; } try { this . monitor . wait ( ) ; } catch ( InterruptedException ex ) { // Re-interrupt current thread, to allow other threads to react. Thread . currentThread ( ) . interrupt ( ) ; interrupted = true ; } } if ( debug ) { logger . debug ( "Entering throttle at concurrency count " + this . concurrencyCount ) ; } this . concurrencyCount ++ ; } } }
To be invoked before the main execution logic of concrete subclasses.
<p>This implementation applies the concurrency throttle.

@see #afterAccess()
To be invoked before the main execution logic of concrete subclasses . <p > This implementation applies the concurrency throttle .