public SingleConsole getAvailableConsole(ConsoleProperties baseConsoleProperties) {
		ConsoleEntry consoleEntry = null;
		try {
			consoleEntry = consoleQueue.poll(getMaxWaitingMilliSecond(), TimeUnit.MILLISECONDS);
			if (consoleEntry == null) {
				throw processException("no console entry available");
			}
			synchronized (this) {
				consoleEntry.releaseSocket();
				// FIXME : It might fail here
				ConsoleCommunicationSetting consoleCommunicationSetting = ConsoleCommunicationSetting.asDefault();
				if (config.getInactiveClientTimeOut() > 0) {
					consoleCommunicationSetting.setInactiveClientTimeOut(config.getInactiveClientTimeOut());
				}
				SingleConsole singleConsole = new SingleConsole(config.getCurrentIP(), consoleEntry.getPort(),
						consoleCommunicationSetting, baseConsoleProperties);
				getConsoleInUse().add(singleConsole);
				singleConsole.setCsvSeparator(config.getCsvSeparator());
				return singleConsole;
			}
		} catch (Exception e) {
			if (consoleEntry != null) {
				consoleQueue.add(consoleEntry);
			}
			throw processException("no console entry available");
		}
	}
Get an available console.
<p/>
If there is no available console, it waits until available console is returned back. If the specific time is
elapsed, the timeout error occurs and throws {@link org.ngrinder.common.exception.NGrinderRuntimeException} . The
timeout can be adjusted by overriding {@link #getMaxWaitingMilliSecond()}.

@param baseConsoleProperties base {@link net.grinder.console.model.ConsoleProperties}
@return console
ngrinder-controller/src/main/java/org/ngrinder/perftest/service/ConsoleManager.java