packagetread.demo.threadpool;importjava.sql.Connection;importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.atomic.AtomicInteger;public classConnectionPoolTest {static ConnectionPool pool = new ConnectionPool(10);static CountDownLatch start = new CountDownLatch(1);staticCountDownLatch end;public static void main(String[] args) throwsException {int threadCount = 1000;
end= newCountDownLatch(threadCount);int count = 20;
AtomicInteger got= newAtomicInteger();
AtomicInteger notGot= newAtomicInteger();for (int i = 0; i < threadCount; i++) {
Thread thread= new Thread(new ConnectionRunner(count, got, notGot), "ConnectionRunnerThread");
thread.start();
}
start.countDown();//tart的CountDown为0,保证了所有线程同时执行。
end.await();//等待所有线程执行完毕,
System.out.println("total invoke: " + (threadCount *count));
System.out.println("got connection: " +got);
System.out.println("not got connection: " +notGot);
}static class ConnectionRunner implementsRunnable {intcount;
AtomicInteger got;
AtomicInteger notGot;public ConnectionRunner(intcount, AtomicInteger got, AtomicInteger notGot) {this.count =count;this.got =got;this.notGot =notGot;
}public voidrun() {try{
start.await();//等待start的CountDown为0.
} catch(InterruptedException e) {
e.printStackTrace();
}while (count > 0) {try{
Connection connection= pool.fetchConnection(1);//超时时间
if (connection != null) {try{
connection.createStatement();
}finally{
pool.releaseConnection(connection);
got.incrementAndGet();
}
}else{
notGot.incrementAndGet();
}
}catch(Exception ex) {
}finally{
count--;
}
}
end.countDown();
}
}
}