Day41
*数据库连接池
I. 概念:数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
II. 主流的连接池:druid 连接池,是阿里的一个开源项目,功能全面,监控,日志分析做的非常好;hikaricp 性能强劲,稳定性也很好,springboot的默认连接池就是它。
III. java中的DataSource接口:所有的连接池都要事先DataSource接口;
IV. 如何使用连接池
1)导入jar包;
2)配置好properties配置文件
3)代码实现
//·连接池对象
static DataSource dataSource;
static {
try {
InputStream is = DBUtilDataSource.class.getClassLoader().getResourceAsStream("druid.properties");
Properties p = new Properties();
p.load(is);
dataSource = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
//·获取连接
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
*线程池(填坑,以前没讲)
I. CacheThreadPool:缓存线程池,里面的线程数量0-21E个线程都可以
public class TestCacheThreadPool {
public static void main(String[] args) {
System.out.println("main方法开始");
//根据你的任务,来自动创建线程,自动销毁线程
//如果60s没有新的任务加进来,会自动关闭
ExecutorService es = Executors.newCachedThreadPool();
//不是有多少任务就有多少线程; 灵活变化的
for(int i = 0 ; i < 20 ; i++) {
MyTask mt = new MyTask();
es.execute(mt);
}
System.out.println("main方法结束");
}
}
//打印当前线程的姓名,和任务内容
class MyTask implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " : 哈哈哈" );
}
}
II. FixedThreadPool:定长线程池,给定长度之后,不管请求多少个线程都只有给定的个数
//创建了一个定长的线程池,长度为5,
ExecutorService es = Executors.newFixedThreadPool(5);
for(int i = 0 ; i < 10 ; i++) {
MyTask mt1 = new MyTask();
es.execute(mt1);
}
es.shutdown(); //完成线程池里面所有线程的任务以后,结束这个线程池
III. SingleThreadExecutor:就像一个长度为1的定长线程池,如果需要多个线程则会排队
ExecutorService es=Executors.newSingleThreadExecutor();
for(int i = 0 ; i < 20 ; i++) {
MyTask mt = new MyTask();
es.execute(mt); //·从打印结果可以看到,从头到尾都只有一个线程
}
System.out.println("main方法结束");