`
m635674608
  • 浏览: 5042266 次
  • 性别: 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 cglib代理

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

    spring事物的隔离级别

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

    基于Spring Boot和Vue的物联网模拟平台.zip

    基于Spring Boot和Vue的物联网模拟平台 项目简介 物联网模拟平台是一个用于解决物联网竞赛期间设备不足或其他特殊情况的系统。该平台充分仿照物联网平台的设计模式,使用随机数模拟数据,尽可能接近真实平台的...

    SpringJDBC事物

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

    java 解析xml,模拟spring框架ioc

    本教程将深入探讨如何模拟Spring框架的IOC(Inversion of Control,控制反转)功能,特别关注XML配置文件的解析。 首先,我们需要理解什么是IOC。控制反转是一种设计原则,它将对象的创建和管理从对象本身剥离出来...

    模拟spring和工具jar包

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

    尚学堂_Spring_0100_模拟Spring

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

Global site tag (gtag.js) - Google Analytics