Java与Scala的两种简易版连接池
Java版简易版连接池:
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.LinkedList; /**
* 简易版的连接池
*/
public class ConnectionPool {
//静态的Connection
private static LinkedList<Connection>connections;
//加载驱动
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接 多线程访问并发问题控制
public synchronized static Connection getConnectoin(){
try {
if (connections==null){
connections=new LinkedList<Connection>();
for (int i =0;i<10;i++){
Connection conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/spark",
"username",
"password" );
connections.push(conn);
}
} }catch (Exception e){
e.printStackTrace();
}
return connections.poll();
}
/**
* 还连接
* 返回连接
*/
public static void returnConnection(Connection conn){
connections.push(conn);
}
}
scala版简易版连接池:
object ConnectionPoolUtil {
/**
* 需要设置的连接池数据
*/
private val max=10//连接池总数
private val connectionNum=10//每次产生连接数
private val pool=new util.LinkedList[Connection]()
private var conNum=0//当前连接池已经产生的连接数
//获取连接
def getConnections(): Connection ={
//同步代码块
AnyRef.synchronized({
//加载驱动
for(i<-1 to connectionNum){
val conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/spark",
"username",
"password"
)
pool.push(conn)
conNum+=1
}
pool.poll()
})
}
//加载驱动
def GetConn(): Unit ={
//控制加载
if (conNum<max && pool.isEmpty){
Class.forName("com.mysql.jdbc.mysql.")
}else if(conNum>=max&&pool.isEmpty){
println("Jdbc Pool had no connection now,please wait a moments")
Thread.sleep(2000)
GetConn()
}
}
//还连接
def returnConn(conn:Connection): Unit ={
pool.push(conn)
}
}
Java与Scala的两种简易版连接池的更多相关文章
- Scala的两种变量
Scala有两种变量,val和var.val类似于Java的final变量,一旦初始化了,就不能再赋值了.var如同Java中的非final变量,可以在生命周期内被多次赋值.
- java中线程分两种,守护线程和用户线程。
java中线程分为两种类型:用户线程和守护线程. 通过Thread.setDaemon(false)设置为用户线程: 通过Thread.setDaemon(true)设置为守护线程. 如果不设置次属性 ...
- 对Java代码加密的两种方式,防止反编译
使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...
- Java线程创建的两种方式
java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较
- Java新建线程的两种方式
Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...
- 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类
转自: http://blog.csdn.net/sunguangran/article/details/6069317 非常感谢原作者,整理的这么详细. 在java中可有两种方式实现多线程,一种是继 ...
- 使用 LinkedBlockingQueue 实现简易版线程池
前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆 ...
- Java实现多线程的两种方式
实现多线程的两种方式: 方式1: 继承Thread类 A: 自定义MyThread类继承Thread类 B: 在MyThread类中重写run() C: 创建MyThread类的对象 D: 启动线程对 ...
随机推荐
- Ubuntu 14.04 软件源服务器集合
http://wiki.ubuntu.com.cn/Template:14.04source 服务器列表 可将 http://cn.archive.ubuntu.com/ubuntu/ 替换为下列任意 ...
- Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...
- c++的bind1st()与bind2nd() 二元算子转一元算子
bind1st()和bind2nd()是两个函数,用于将二元算子转成一元算子. 何谓二元算子? 比如< > =等等这些就是二元算子,即需要两个操作数的运算符. 何谓一元算子? 比如++ - ...
- jrtplib源码分析 第一篇 jthread的编译与分析
第一篇 jthread的编译与分析 jrtplib代码依赖库jthread,因此先从jthread开始jrtplib的学习.首先从以下链接下载jthread的源代码http://research.ed ...
- MySQL入门很简单: 9 插入 更新与删除数据
1. 插入数据:INSERT 1)为表的所有字段插入数据 第一种: 不指定具体的字段名 INSERT INTO 表名 VALUES(值1,值2,...,值n): 第二种:INSERT语句中列出所有字段 ...
- IOS 多线程-pthread
#import <pthread.h> @interface HMViewController () - (IBAction)btnClick; @end @implementation ...
- 类似LIS+贪心(ZOJ1025)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=25 解题报告: #include <cstdio> #in ...
- 2018.7.22 Jdom与dom的区别
SAX 优点:①无需将整个文档加载到内存,因而内存消耗少 ②推模型允许注册多个ContentHandler 缺点:①没有内置的文档导航支持 ②不能够随机访问XML文档 ③不支持在原地修改XML ④不支 ...
- npy数据的保存与读取
保存 利用这种方法,保存文件的后缀名字一定会被置为.npy x = numpy.save("data_x.npy",x) 读取 data = numpy.load("da ...
- C语言学生成绩管理系统(简易版)
#include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...