`
m635674608
  • 浏览: 5027987 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring 多线操作事物问题 模拟

 
阅读更多
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.NClob;
import java.sql.PreparedStatement;
import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
import java.sql.Struct;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class SpringTransactionTest {

	
	ThreadLocal<String> threadLocal = new ThreadLocal<>();
	
	static ExecutorService executorService = Executors.newFixedThreadPool(4);
	 
	 
	 
	 public static void main(String[] args)throws Exception {
		final SpringTransactionTest springTransactionTest = new SpringTransactionTest();
		 
		/*for(int i=0;i<10;i++){
			 executorService.execute(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						springTransactionTest.updateDB();
					};
				});
		}
		Thread.sleep(10000);
		
		for(int i=0;i<10;i++){
			 executorService.execute(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						springTransactionTest.updateDB();
					};
				});
		}*/
		//并发执行数据库修改操作,线程池中,
		//每个线程对象持有数据库Connection对象在线程上下文中,没有释放。时间一久,会引起浪费,超时,等问题
		
		//解决办法 (推荐2)
		//1.手动释放线程上下文中的 数据库连接池对象connection
		//2.从设计角度上解决此问题,不要在线程池中获取数据库连接池
		
		
		
		for(int i=0;i<10;i++){
			 executorService.execute(new Thread() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						springTransactionTest.updateDB();
					};
				});
		}
		Thread.sleep(10000);
		
		for(int i=0;i<10;i++){
			 executorService.execute(new Runnable() {
					@Override
					public void run() {
						// TODO Auto-generated method stub
						springTransactionTest.updateDB();
					};
				});
		}
	}
	
	//执行数据库修改操作 (spring加事物)
	public void updateDB(){
		String threadId = Thread.currentThread().getId()+"";
		String connection = getConnection();
		System.out.println("threadId="+threadId+" connectionId="+connection);
		//update 
		
	}
	
	//获取数据库连接池 连接
	public String getConnection(){
		String connection = threadLocal.get();
		if(connection==null){
			threadLocal.set(UUID.randomUUID().toString());
		}
		return threadLocal.get();
	}
	
}

 

分享到:
评论

相关推荐

    以注解方式模拟Spring IoC AOP

    当目标方法被调用时,Spring会检查是否有相关的切面注解并执行相应操作。 为了模拟AOP,我们可以创建一个拦截器接口,然后定义一个处理切面逻辑的方法。使用自定义注解(如`@BeforeAdvice`)标记需要在调用前执行的...

    Spring简单模拟Spring容器

    标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...

    Java模拟spring实现

    在本文中,我们将探讨如何通过Java来模拟Spring框架的基本功能。Spring是一个广泛应用的开源框架,它主要为Java应用程序提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP...

    自己动手模拟spring

    【标题】:“自己动手模拟spring” 【描述】:在该主题中,我们将深入理解Spring框架的核心概念,并通过编码实践来模拟其工作原理。参考链接提供了一个CSDN博客文章,作者详细介绍了如何从零开始创建一个简易版的...

    模拟spring

    本文将通过对“模拟Spring”的探讨,帮助读者深入理解Spring的核心机制,并通过实际操作,提升对Spring框架的掌握。 首先,我们来看`pom.xml`文件,这是Maven项目的核心配置文件。在Spring项目中,`pom.xml`用于...

    模拟Spring的IOC

    **模拟Spring的IOC** 在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)能力,成为企业级应用开发的首选框架之一。理解并模拟Spring的IOC...

    spring事物代码片段

    spring事物代码片段,包含了定义输入传播性,和参与事物的类

    第十四章 Spring4 切面事物与事物通知与传播行为

    在IT领域,Spring框架是Java开发中的核心组件之一,它为开发者提供了许多强大的功能,包括依赖注入、...通过阅读博文链接(已提供),你可以获取更多关于Spring4切面事务、事物通知及传播行为的深入解析和实践示例。

    java模拟spring ioc

    这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...

    spring事物和rabbitMQ的例子

    这意味着当操作涉及到不同数据源时,Spring可以确保每个事务的正确性,避免数据不一致。这种特性在大型分布式系统中非常关键,因为它能够保证复杂业务逻辑的一致性和可靠性。 再来说说RabbitMQ,这是一个流行的开源...

    模拟Spring IoC

    在这个模拟Spring IoC的项目中,我们可以深入理解以下几个关键知识点: 1. **容器的概念**:Spring IoC容器是管理对象及其依赖关系的核心组件。在这个模拟项目中,会有一个类或接口扮演容器的角色,负责创建对象、...

    模拟实现Spring的IOC

    模拟实现__Spring的Ioc 1、Spring主要两个作用:实例化Bean,动态装配Bean。并将所有的bean放到spring容器中,调用时从容器中取。Spring容器就是一个bean的Map:private Map, Object&gt; beans = new HashMap, Object&gt;...

    基于springcloud +dubbo构建的模拟秒杀微服务项目

    基于springcloud +dubbo构建的模拟秒杀微服务项目,集成了分库分表、elasticsearch、gateway、mybatis-plus、spring-session等常用开源组件。 基于springcloud +dubbo构建的模拟秒杀微服务项目,集成了分库分表、...

    简单模拟Spring的beanFactory

    这对于日常开发和优化Spring应用非常有帮助,尤其是在解决依赖问题或自定义bean处理逻辑时。同时,了解这些基础知识也为理解和使用Spring的其他组件,如`ApplicationContext`、`Prototype`作用域、`@Autowired`注解...

    简单模拟spring cglib代理

    现在,我们来详细探讨如何简单模拟Spring框架中的CGLIB代理。要进行模拟,首先需要了解CGLIB代理的核心实现原理,包括代理类的生成、方法拦截和回调机制等。 1. 代理类的生成 CGLIB使用Enhancer类来生成代理对象。...

    spring事物的隔离级别

    spring事物的隔离级别,spring对于事物的操作隔离级别分为文档中的几种

    SpringJDBC事物

    SpringJDBC事物SpringJDBC事物SpringJDBC事物SpringJDBC事物SpringJDBC事物SpringJDBC事物SpringJDBC事物SpringJDBC事物

    模拟spring和工具jar包

    本资源名为“模拟spring和工具jar包”,其目的是为了帮助我们理解Spring框架的核心概念——依赖注入,并通过一个简化版的实现来学习这一机制。 依赖注入是Spring框架的核心特性之一,它允许我们在不直接创建对象的...

    尚学堂_Spring_0100_模拟Spring

    《尚学堂_Spring_0100_模拟Spring》 在深入探讨Spring框架之前,我们需要先理解Spring的核心理念。Spring是一个开源的Java平台,它主要为构建企业级应用提供了全面的编程和配置模型。它的核心特性是依赖注入...

    spring 整合hibernate的事物配置.pdf

    spring 整合hibernate的事物配置

Global site tag (gtag.js) - Google Analytics