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: 启动线程对 ...
随机推荐
- VtigerCRM-6.4.0-zh_CN (OpenLogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: vtigercrm6.4.0 commercial crm mysql open source php vtiger 简体中文版 服务优惠价: 按服 ...
- vos优化客户线路数量
问题: 客户A打电话过来说之前给开的300线路不够用了,今天好多电话呼不出去了,线路太挤了! 麻烦增加线路,如何操作? 方法: 登陆VOS——在线对接——(客户A的对接网关ID)——双击 打开网关管理 ...
- Node.js-npm安装包目录修改
请借我一个哭的表情....=.= 等我发现的时候为时已晚~所有安装的包都去了C盘,而强迫症的我想卸载了之前所有的包再重新下一遍!!! 切记!安装好npm后,记得修改: 原始路径: 修改后的路径(如果没 ...
- IOS中 copy ,strong ,weak ,assign使用区别
.@property属性的用法 * weak(assign) : 代理\UI控件 * strong(retain) : 数组.模型)其他对象(除代理\UI控件\字符串以外的对象) * copy ...
- 实例详解Django的 select_related
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...
- 指定类型的成员XX”不支持实体LINQ。只有初始化,成员单位,和实体导航性能的支持。
The specified type member 'DeleteFlag' is not supported in LINQ to Entities. Only initializers, enti ...
- 2019.03.09 ZJOI2019模拟赛 解题报告
得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...
- python中的反斜杠问题
python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候 s = 'i\'m superman' print(s) # i'm superman 为了防止和字符串本身的引号冲突,使用 ...
- 当Java遇见了Html--Jsp九大内置对象篇
jsp内置对象对象是web容器创建的一组对象,不使用new关键词久可以使用的内置对象. 九大内置对象包括以下: out --JspWriter request --ServletRequest rep ...
- cursor 在某一操作之前打开 fetch cursorname into var1
工作中遇到这样一个问题,在一个存储过程中,我想让一个游标在某一操作之前打开,说白了操作会影响我游标中已定义好的数据,这里我们用到游标的第二种用法,代码如下 cursor c_relation is s ...