public class ConnectionPool {
private static final int MAX_POOL_SIZE = 10;
private static final int MIN_IDLE_CONNECTIONS = 5;
private static final long CONNECTION_TIMEOUT = 5000;
private static final LinkedBlockingQueue<Connection> connectionPool = new LinkedBlockingQueue<>();
private static void initializeConnectionPool() {
for (int i = 0; i < MIN_IDLE_CONNECTIONS; i++) {
connectionPool.offer(createNewConnection());
}
}
public static Connection getConnection() {
if (connectionPool.isEmpty()) {
return createNewConnection();
}
return connectionPool.poll();
}
public static void releaseConnection(Connection connection) {
connectionPool.offer(connection);
}
private static Connection createNewConnection() {
Connection connection = ConnectionFactory.createConnection();
return connection;
}
public static void close() {
for (Connection connection : connectionPool) {
connection.close();
}
connectionPool.clear();
}
}
public class ConnectionFactory {
public static Connection createConnection() {
return new Connection();
}
}
public class Connection {
public void close() {
}
}