threadlocal连接oracle,ThreadLocal学习----简单例子应用。

1. ThreadLocal的解释,参见

http://my.oschina.net/u/1989867/blog/528047

2. ThreadLocal的简单应用:利用ThreadLocal隔离局部变量的特点实现为每个线程提供自己的数据库链接

ConnectionResource.java ------------------------------------------产生数据库链接的资源类

package com.lxh.ThreadLocal;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

// 资源类

public class ConnectionResource {

// 属性

public static String userName = "root";

public static String userPass = "admin123";

public static String url = "jdbc:mysql://localhost:3306/user";

public static String driverName = "com.mysql.jdbc.Driver";

// 获取数据库链接

public Connection getConnection(){

Connection conn = null;

try {

Class.forName(driverName);

conn = DriverManager.getConnection(url, userName, userPass);

} catch (SQLException e) {

System.out.println("获取数据库链接失败..."+e.getMessage());

} catch (ClassNotFoundException e) {

System.out.println("获取数据库加载类失败..."+e.getMessage());

e.printStackTrace();

}

return conn;

}

}        ConnectionThread.java   ------------------------------------------模拟多个线程实现多次获取数据库链接

package com.lxh.ThreadLocal;

import java.sql.Connection;

//

public class ConnectionThread implements Runnable {

//

public ThreadLocal tl = new ThreadLocal() {

@Override

protected Connection initialValue() {

ConnectionResource cr = new ConnectionResource();

return cr.getConnection();

}

};

@Override

public void run() {

// 链接对象

Connection conn = null;

// 循环获取线程的链接对象

for (int i = 0; i < 5; i++) {

conn = tl.get();

System.out.println("***当前线程【" + Thread.currentThread().getName()

+ "】获取的链接资源:" + conn + "***");

}

}

}        Test.java               ------------------------------------------测试类

package com.lxh.ThreadLocal;

/**

* 使用ThreadLocal解决多线程问题

*/

public class Test {

public static void main(String[] args) {

ConnectionThread ct = new ConnectionThread();

Thread t0 = new Thread(ct);

Thread t1 = new Thread(ct);

Thread t2 = new Thread(ct);

Thread t3 = new Thread(ct);

t0.start();

t1.start();

t2.start();

t3.start();

}

}     3. 测试结果

e23de9d223bf6c1a227be9eafb65e631.png

4. 测试结果分析

我们通过"测试结果"可以清晰地看到,同一个线程,无论请求多少次,其获取到的数据库链接都是一样的,这符合我们的预期----不让同一个线程获取多个数据库链接以减少资源消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值