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<Connection> tl = new ThreadLocal<Connection>() {
		@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. 测试结果
    4. 测试结果分析        咱们经过"测试结果"能够清晰地看到,同一个线程,不管请求多少次,其获取到的数据库连接都是同样的,这符合咱们的预期----不让同一个线程获取多个数据库连接以减小资源消耗。
相关文章
相关标签/搜索