1.定义连接池类
package com.whx.conpool;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.xml.ws.FaultAction;
import com.mysql.jdbc.Connection;
public class DBPool extends Thread {
private static LinkedList<Connection> pool = new LinkedList<Connection>();
public DBPool( ){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i = 0 ; i < 5; i ++){
try {
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.0.107:3306/test","root","123456");
pool.add(con);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
addConToPool();
}
public void addConToPool(){
try {
synchronized (pool) {
while(true){
if(pool.size() < 5 ){
System.out.println("当前连接池有"+pool.size()+"个连接");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.0.107:3306/test","root","123456");
pool.addLast(con);
//释放锁并通知其他线程可以拿了
try {
//释放
pool.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pool.size() >= 5){
System.out.println("连接池已经满5个了");
try {
//释放锁并等待其他线程满了可以拿了
pool.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (pool) {
if(!pool.isEmpty()){
// 移除并返回第一个元素
pool.notifyAll();
return pool.removeFirst();
}else{
//释放锁并通知其他线程可以对pool做事情了
pool.notifyAll();
}
}
return null;
}
}
2.实现类
package com.whx.conpool;
import com.mysql.jdbc.Connection;
public class ThreadConnection extends Thread{
DBPool pool = new DBPool();
@Override
public void run() {
while(true){
getConnection();
}
}
public Connection getConnection(){
Connection conn = pool.getConnection();
System.out.println("拿到了:"+conn);
return conn;
}
public static void main(String[] args) {
DBPool db =new DBPool();
db.start();
ThreadConnection t1 = new ThreadConnection();
t1.start();
}
}