package org.wonderdb.query.sql; import java.sql.Connection; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentMap; public class WonderDBConnectionPool { private static WonderDBConnectionPool instance = new WonderDBConnectionPool(); ConcurrentMap<String, ConcurrentLinkedQueue<Connection>> map = new ConcurrentHashMap<String, ConcurrentLinkedQueue<Connection>>(); private WonderDBConnectionPool() { } public static WonderDBConnectionPool getInstance() { return instance; } public Connection getConnection(String host, int port) { String key = host + "_" + port; ConcurrentLinkedQueue<Connection> q = map.get(key); ConcurrentLinkedQueue<Connection> q1 = q; if (q == null) { q = new ConcurrentLinkedQueue<Connection>(); q1 = map.putIfAbsent(key, q); } if (q1 == null) { q1 = q; } Connection c = q1.poll(); return c; } public void returnConnection(WonderDBConnection c) { String key = c.host + "_" + c.port; ConcurrentLinkedQueue<Connection> q = map.get(key); q.add(c); } public void shutdown() { Iterator<ConcurrentLinkedQueue<Connection>> iter = map.values().iterator(); while (iter.hasNext()) { ConcurrentLinkedQueue<Connection> q = iter.next(); if (q == null) { continue; } Iterator<Connection> cIter = q.iterator(); while (cIter.hasNext()) { WonderDBConnection c = (WonderDBConnection) cIter.next(); c.shutdown(); } } } }