ThreadLocal 本地线程变量:

private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
  tl.get():获取的就是当前线程中map{tl:conn}中的conn
  tl.set(conn):向当前线程中的map中保存一个元素{tl:conn}
  tl.remove():从当前线程中的map移除key为tl的元素
  initialValue():当调用get()获取当前线程的map中元素时,如果不存在,则调用该方法创建一个,并保存到map中

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3
 4 public class TranManager {
 5     private static ThreadLocal<Connection> tl=
 6                     new ThreadLocal<Connection>(){
 7         /**
 8          * 内部方法
 9          * 返回回该线程局部变量的初始值
10          * 初始化线程,每次get()或者set(object)的时候会被调用。
11          */
12         protected Connection initialValue() {
13             try {
14                 return DaoUtils.getConn();
15             } catch (Exception e) {
16                 e.printStackTrace();
17                 return null;
18             }
19         }
20     };
21     private TranManager(){}
22     public static  Connection getConn(){
23         return tl.get();
24     }
25     /**
26      * @return 开启手动提交事务,
27      * @false: 将sql命令交给应用程序管理
28      */
29     public static void startTran(){
30         try {
31             tl.get().setAutoCommit(false);
32         } catch (SQLException e) {
33             e.printStackTrace();
34         }
35     }
36     /**
37      * @return 回滚
38      */
39     public static void rollbackTran(){
40         try {
41             tl.get().rollback();
42         } catch (SQLException e) {
43             e.printStackTrace();
44         }
45     }
46     /**
47      * @return 执行
48      */
49     public static void commitTran(){
50         try {
51             tl.get().commit();
52         } catch (SQLException e) {
53             e.printStackTrace();
54         }
55     }
56     /**
57      * @return 关闭
58      */
59     public static void release(){
60         try {
61             tl.get().close();
62             tl.remove();//map{tl:conn}
63         } catch (SQLException e) {
64             e.printStackTrace();
65         }
66     }
67     /*public void rollbackTran(Savepoint sp){
68         try {
69             conn.rollback(sp);
70             conn.commit();
71         } catch (SQLException e) {
72             e.printStackTrace();
73         }
74     }*/
75 }

转载于:https://www.cnblogs.com/pxffly/p/7622216.html

ThreadLocal 解决多线程程序的并发问题+事务处理相关推荐

  1. 获取返回值作为变量_解决多线程间共享变量线程安全问题的大杀器——ThreadLocal...

    微信公众号:Zhongger 我是Zhongger,一个在互联网行业摸鱼写代码的打工人! 关注我,了解更多你不知道的[Java后端]打工技巧.职场经验等- 上一期,讲到了关于线程死锁.用户进程.用户线 ...

  2. 解决多线程间共享变量线程安全问题的大杀器——ThreadLocal

    上一期,讲到了关于线程死锁.用户进程.用户线程的相关知识,不记得的小伙伴可以看看:字节跳动面试官问我:你知道线程死锁吗?用户线程.守护线程的概念与区别了解吗? 这期,我们来聊一聊一个在Java并发编程 ...

  3. 如何解决多线程并发问题

    多线程编程中的三个核心概念 原子性 这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效). 关于原子性,一个非常经典的例子就是 ...

  4. python 退出程序_Python:用Ctrl+C解决终止多线程程序的问题!(建议收藏)

    前言: 今天为大家带来的内容是Python:用Ctrl+C解决终止多线程程序的问题!文章中的代码具有不错的参考意义,希望在此能够帮助到各位!(多数代码用图片的方式呈现出来,方便各位观看与收藏) 出发点 ...

  5. php抢红包 并发 超时,处理高并发 IO瓶颈解决红包程序

    解决高并发 io瓶颈解决红包程序 本程序模拟的红包抽奖模式.总金额100元,随机用户获得1-10元的红包,直到红包分发完. redis中luckMoneyMax需要提前设置 $r->set('l ...

  6. Java-多线程-Future、FutureTask、CompletionService、CompletableFuture解决多线程并发中归集问题的效率对比

    转载声明 本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容: [小家Java]Future.FutureTask.CompletionService.CompletableFut ...

  7. 解决多线程并发安全问题

    解决多线程的并发安全问题,java无非就是加锁,具体就是两个方法 (1) Synchronized(java自带的关键字) (2) lock 可重入锁 (可重入锁这个包java.util.concur ...

  8. 解决多线程高并发问题常用类

    Volatile关键字 1.volatile解决可见性 //创建一个类继承Thread类 public class MyThread extends Thread{//定义一个共享的静态成员变量,供多 ...

  9. 一篇博客带你轻松应对java面试中的多线程与高并发

    1. Java线程的创建方式 (1)继承thread类 thread类本质是实现了runnable接口的一个实例,代表线程的一个实例.启动线程的方式start方法.start是一个本地方法,执行后,执 ...

最新文章

  1. freeMarker语法
  2. 汇编语言--mul 指令
  3. Centos Apache服务搭建
  4. OpenPitrix 是一款开源多云应用程序管理系统
  5. php glob() 列出目录及文件
  6. html仿苹果浏览器,完美仿iPhone风格主题 领航浏览器体验
  7. Array 复制到ArrayList中
  8. C/C++ OpenCV图像的线性混合
  9. 微信网站-微信应用-微信二次开发-演示方案
  10. 时间序列分析(3)| ARMA模型的拟合
  11. 程序员的遗憾:忽视数学必定后悔!
  12. 微服务架构 | 配置中心 - [Config]
  13. 软件工程 可行性分析与需求分析
  14. 商业计划书PPT模板
  15. 企业发文的红头文件_实例分享:怎样制作双发文单位红头文件,文件二字与发文单位并排...
  16. java判断闰年中闰月_闰年闰月查询表_闰月查询表_闰年查询表-万年历
  17. 《让子弹飞》系列——《让子弹飞》中最大的彩蛋
  18. Unicable命令设置
  19. wince槛外人窥探--存储布局
  20. (转)gallary和imageswitcher

热门文章

  1. 自学前端1年,靠着这份面试题和答案,我找到了20K工作
  2. Web前端知识体系梳理,值得收藏!
  3. 【C语言】在线OJ题 BC99-BC119-牛客网编程初学者入门训练
  4. oracle数据库速度测试,【原创】验证在Oracle数据库中操纵数据的各种方法的速度...
  5. 同一字段降序个升序_5个打印小技巧,表格打印没烦恼
  6. c语言教程 萌萌哒,本人C语言小白,帮我解释每段代码的意思。谢了萌萌哒
  7. Linux文件句柄占用数量查看与设置
  8. JavaScript中DOM操作
  9. liunx下pytorch(python2.7)先前几个版本的安装(由于官网点击先前版本进不去)
  10. 【转】QT中使用MYSQL中文乱码解决方法