文档章节

ThreadLocal学习----简单例子应用。

绿林小子
 绿林小子
发布于 2015/11/19 09:17
字数 403
阅读 134
收藏 2
    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. 测试结果分析
       我们通过"测试结果"可以清晰地看到,同一个线程,无论请求多少次,其获取到的数据库链接都是一样的,这符合我们的预期----不让同一个线程获取多个数据库链接以减少资源消耗。

© 著作权归作者所有

共有 人打赏支持
绿林小子
粉丝 4
博文 131
码字总数 45566
作品 0
福州
私信 提问
Go调用Java的一个简单例子

由于Java世界里有非常丰富的开源应用模型和轮子,而这些正是Go世界里面最缺乏的东西,所以我首先考虑的就是如何在Go里面调用现有的Java代码。早上写了个简单的Go调用Java的例子,在winxp环境...

qinhui99
2012/06/26
0
12
java学习从入门到精通(原创)--精华【续】

四、 Java应用的运行环境 Java的应用可以简单分为以下几个方面: 1、 Java的桌面应用 桌面应用一般仅仅需要JRE的支持就足够了。 2、 Java Web应用 Java的Web应用至少需要安装JDK和一个web容器...

精华之王
2009/04/12
682
2
8.4 Spring Boot集成Kotlin混合Java开发

8.4 Spring Boot集成Kotlin混合Java开发 本章介绍Spring Boot集成Kotlin混合Java开发一个完整的spring boot应用:Restfeel,一个企业级的Rest API接口测试平台(在开源工程restfiddle[1]基础...

程序员诗人
2017/04/25
0
0
Android学习笔记(四四):第三方Java库的使用

Java有很多第三方库。Android的Dalvik虚拟器不完全是Java,也就是Android SDK和传统的SDK不完全一样,如果Java库兼容Android,则可被利用。Java库使用受限于下面因素: 目标平台:Java代码适...

鉴客
2011/12/01
770
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部