多线程 - ThreadLocal
来源:互联网 发布:人工智能 企业 编辑:程序博客网 时间:2024/06/05 19:59
ThreadLocal管理Connection
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 利用ThreadLocal管理Connection * * @author ZHEN.L * */public class ThreadLocalConnection {private static final String DB_URL = "jdbc:mysql://localhost:3306/hxzq1?useUnicode=true&characterEncoding=UTF-8";private static final String DB_USERNAME = "root";private static final String DB_PASSWORD = "123456";private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>();/** * 获取连接 * * @return */public static Connection getConnection() {Connection conn = null;conn = connectionHolder.get();if (conn == null) {conn = createConnection();connectionHolder.set(conn);}return conn;}// 创建连接private static Connection createConnection() {Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}public static void main(String[] args) {// 创建线程池ExecutorService pool = Executors.newFixedThreadPool(10);ThreadConnection threadConn = new ThreadConnection();for (int i = 0; i < 10; i++) {pool.execute(threadConn);}pool.shutdown();}}/** * 获取连接 * * @author ZHEN.L * */class ThreadConnection implements Runnable {public void run() {Connection conn = ThreadLocalConnection.getConnection();System.out.println(conn);}}
ThreadLocal采用线程封装技术,相当于内部实现了Map<Thread,Object>,为每个线程创建对象的副本
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadLocalTest {private ThreadLocal<Object> threadLocal = new ThreadLocal<Object>();public void set(Object obj) {threadLocal.set(obj);}public Object get() {return threadLocal.get();}public static void main(String[] args) {ThreadLocalTest t = new ThreadLocalTest();ExecutorService pool = Executors.newFixedThreadPool(10);for (int i = 0; i < 12; i++) {pool.execute(new ThreadTest4(t));}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}for (int i = 0; i < 10; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}pool.execute(new ThreadTest3(t));}pool.shutdown();}}class ThreadTest3 implements Runnable {private ThreadLocalTest threadLocalTest;public ThreadTest3(ThreadLocalTest threadLocalTest) {this.threadLocalTest = threadLocalTest;}public void run() {Object obj = threadLocalTest.get();System.out.println(Thread.currentThread().getName() + ": " + obj);}}class ThreadTest4 implements Runnable {private ThreadLocalTest threadLocalTest;public ThreadTest4(ThreadLocalTest threadLocalTest) {this.threadLocalTest = threadLocalTest;}public void run() {threadLocalTest.set(Thread.currentThread().getName());}}
0 0
- 多线程 - ThreadLocal
- 多线程---threadLocal
- Java多线程之ThreadLocal
- Java多线程之ThreadLocal
- ThreadLocal与多线程
- JAVA多线程之ThreadLocal
- JAVA多线程----ThreadLocal
- Java多线程之 ThreadLocal
- 多线程编程1-----ThreadLocal
- Java多线程中的ThreadLocal
- 多线程之threadLocal
- java多线程<一>ThreadLocal
- 多线程之ThreadLocal类
- java多线程之ThreadLocal
- Java多线程之----ThreadLocal
- java多线程--ThreadLocal类
- Java多线程之ThreadLocal
- 多线程Atomic和ThreadLocal
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- http://www.2cto.com/os/201202/118033.html
- 关于酿酒的一些问题
- 机器学习问题方法总结
- Spring定时任务的几种实现
- 多线程 - ThreadLocal
- (转载) readonly 和 disable的区别
- iOS数组中的判断某元素是否存在于数组中
- AS中引入library 以及RxJava
- Java中处理时区的转换
- Activiti入门学习demo_1_流程定义和发布
- oracle auto increment
- 修改mfc程序图标、利用DUILIB库自定义界面
- android studio 添加按钮点击事件的三种方法