Thread.currentThread().sleep(3000);
Thread.sleep(3000);
    protected RequestEvaluator getEvaluator() {        if (stopped) {            throw new ApplicationStoppedException();        }        // first try        try {            return (RequestEvaluator) freeThreads.pop();        } catch (EmptyStackException nothreads) {            int maxThreads = 12;            try {                maxThreads = Integer.parseInt(props.getProperty("maxThreads"));            } catch (Exception ignore) {                // property not set, use default value            }            synchronized (this) {                // allocate a new evaluator                if (allThreads.size() < maxThreads) {                    logEvent("Starting evaluator " + (allThreads.size() + 1) +                             " for application " + name);                    RequestEvaluator ev = new RequestEvaluator(this);                    allThreads.addElement(ev);                    return (ev);                }            }        }        // we can't create a new evaluator, so we wait if one becomes available.        // give it 3 more tries, waiting 3 seconds each time.        for (int i = 0; i < 4; i++) {            try {                Thread.currentThread().sleep(3000);                return (RequestEvaluator) freeThreads.pop();            } catch (EmptyStackException nothreads) {                // do nothing            } catch (InterruptedException inter) {                throw new RuntimeException("Thread interrupted.");            }        }        // no luck, give up.        throw new RuntimeException("Maximum Thread count reached.");    }