如果既要保证数据安全,又要保证性能,可以考虑ThreadLocal(线程本地变量)
ThreadLocal:可为每个线程 创建一个副本。每个线程可以访问自己内部的副本。
即 new(创建)1次 ,ThreadLocal(复制) 多次
举个例子:就好比 CSDN有一份资料 卖100C币 ,有A、B、C三人要买 不用ThreadLocal 就一人买一份,共花300C币
用了ThreadLocal,就是A买一份,然后拷贝粘贴出2份给B,C。只花100C币
对于数据库来说,一个连接 对应于 一个事务(是用户定义的一个数据库操作序列,这些操作要么全做,要不全不做。) , 一个事务可以包含多个DML(数据操纵语言)操作。
事务流程:开启事务(将自动提交→手工提交)→ 进行各种DML → 正常,将刚才所有DML全部提交
→失败(有异常),将刚才所有DML回滚
public class JDBCUtils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
private static ThreadLocal<Connection> tl=new Thr