JdbcUtils 处理多线程并发访问问题 | 学习笔记

简介: 快速学习 JdbcUtils 处理多线程并发访问问题

开发者学堂课程【JDBC 数据库开发进阶JdbcUtils 处理多线程并发访问问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/32/detail/694


JdbcUtils 处理多线程并发访问问题


内容简介:

相关代码


相关代码

package cn.itcast.jdbc;

import java.sql.connection;

public class JdbcUtils {

//配置文件的默认配置!要求你必须给出c3p0-config.xml! ! !

private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

//它是事务专用连接!

private static connection con = null;

/**

使用连接池返回一个连接对象

*@return

*@throws SQLException

*/

public static Connection getConnection( ) throws sQLException {

//当con不等于null,说明已经调用过beginTransaction (),表示开启了事务!if( con != null) return con;

return datasource.getconnection ();

}

*使用连接池返回一个连接对象

*@return

*@throws SQLException

*/

public static connection getconnection() throws sQLException {

//当con不等于null,说明已经调用过beginTransaction ( ),表示开启了事务!

if ( con != null) return con;

return datasource.getConnection () ;

}

/**

*返回连接池对象!

*/return

*/

public static Datasource getDatasource () {

return datasource;

}

/**

*开启事务

*1.获取一个connection,设置它的setautoComnrnit (false)

*2.还要保证dao中使用的连接是我们刚刚创建的!

*--------------

*1.创建一个connection,设置为手动提交

*2.把这个connection给dao用!

*3.还要让conitTransaction或rollbackTransaction可以获取到!

*@throws sQLException

*/

public static void beginTransaction()throws sQLException {

if(con != null) throw new sQLException("已经开启了事务,就不要重复开启了!");

/*

*1.给con赋值!

*2.给con设置为手动提交!

*/

con = getconnection( ) ; //给con赋值,表示事务已经开始了con.setAutoCormit (false) ;

}

tl.set (con);//把兰刖线程的连接保仔起米!

}

/**

*提交事务

*1.获取beginTransaction提供的connection,然后调用commit方法/*@throws SQLException

*/

public static void commitTransaction() throws sQLException {

if(con == null) throw new SQLException ("还没有开启事务,不能提交! ");

/*

*1.直接使用con. commit ()

*/

con- commit ();

con.close ();

//把它设置为null,表示事务已经结束了!下次再去调用getConnection ()返回的就不是gon 了son.= null;

}

/**

*提交事务

*1.获取beginTransaction提供的connection,然后调用rollback方法

throws SQLException

*/

public static void rollbackTransaction () throws sQLException {

Connection con =  

if(con == null) throw new sQLException ("还没有开启事务,不能回滚!");

/*

*1.直接使用con.rollback ()

*/

Con.rollback ();

con.-close () ;

con= null;

}

/**

*释放连接

*@param connection

*@throws sQLException

*/

public static void releaseConnection(Connection connection) throws SQLException

Connection con = tl.get ();

/*

*判断它是不是事务专用,如果是,就不关闭!

*如果不是事务专用,那么就要关闭!

*/

//如果con == null,说明现在没有事务,那么connection一定不是事务专用的!

if(con ==null) connection.close () ;

//如果con != null,说明有事务,那么需要判断参数连接是否与con相等,若不等,说明参数连接不

if(con != connection) connection.close() ;

}

package cn.itcast.jdbc;

import java.sql.sQIException;

public class Demo1 {

private AccountDao dao = new AccountDao ( );

@Test

public void serviceMethod ( ) {

try {

JdbcUtils.beginTransaoction( ) ;

dao.update.("zs",-1.00);

if(true) throw new RuntimeException ( ;

dao.update(".ls"...100);

JdbcUtils.oommitTransaction ( ) ;

}catch(Exception e) {

try {

JdbcUtils. rollbackTransaction ( ) ;

catch isOLException e1) {

image.png

image.png

相关文章
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
7天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
9天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
7 0
|
13天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
25天前
|
安全 Java
Java中的多线程并发控制
在Java中,多线程是实现并发执行任务的一种重要方式。然而,随着多个线程同时访问共享资源,可能会导致数据不一致和其他并发问题。因此,了解并掌握Java中的多线程并发控制机制显得尤为重要。本文将深入探讨Java的多线程并发控制,包括synchronized关键字、Lock接口、Semaphore类以及CountDownLatch类等,并通过实例代码演示其使用方法和注意事项。
12 2
|
1月前
|
算法 安全 Unix
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
30 0
|
1月前
|
负载均衡 Java 数据处理
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(三)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
55 2
|
1月前
|
存储 监控 Java
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(二)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
43 1
|
1月前
|
负载均衡 安全 Java
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(一)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
57 2
|
1月前
|
人工智能 缓存 前端开发
ai对话---多线程并发处理问题
ai对话---多线程并发处理问题