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: 启动线程对 ...
随机推荐
- Git的使用(详细)
一下内容引自网络 原帖:http://blog.jobbole.com/78960/ 原文出处: 涂根华的博客
- ffmpeg 安装和参数介绍
0.说明: 1).configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –pr ...
- ABAP和Java SpringBoot的单元测试
ABAP 在ABAP类里,本地类(Local Class)里用关键字FOR TESTING声明过的方法, 在单元测试启动后会自动被调用到. Spring Boot 在Spring及Spring Boo ...
- Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程
刚刚装Deepin15.7 和 MySQL5.7 发现没有提示用户输入密码的过程(近日发现Linux Mint 和 Ubuntu18 也适用) 百度了一大堆如何修改root密码 也没什么卵用,终于这篇 ...
- 一个TCP的问题,所谓TCP面向连接的虚电路到底是怎么实现的?
http://www.cskaoyan.com/thread-23715-1-1.html 今天我又查阅了一些资料,发觉一个问题,TCP所谓的面向连接的特性以及建立虚电路,与网络层虚电路服务好像有着本 ...
- segment and section for c++ elf
http://blog.csdn.net/jiafu1115/article/details/12992497 写一个汇编程序保存成文本文件max.s. 汇编器读取这个文本文件转换成目标文件max.o ...
- 模拟停车POJ(3505)
题目链接:http://poj.org/problem?id=3505 解题报告: #include <stdio.h> #include <iostream> #includ ...
- IBM带库加磁带操作
1.查询要弹出磁带的信息 可查询media日志,冻结,可用等,详情可查 查看带库空闲槽位 vmcheckxxx -rt tld -rn 0(0为带库名) 磁带详细信息: bpmedialist -m ...
- 如何不安装SQLite让程序可以正常使用
System.Data.SQLite.dll和System.Data.SQLite.Linq.dll不必在GAC里面,关键在于Machine.config的DBProviderFactories没有正 ...
- P1069 细胞分裂
P1069 细胞分裂 考虑质因数分解 先将m1,质因数分解后再根据数学定理将所有质数的质数全乘m2 然后将输入的数据相同处理,再判断 顺便说一下判断规矩 1肯定不行 如果分解后有没有m1质因数分解中的 ...