首页 > 编程语言 >@Transactional事务注解与函数内多线程并发编程出现的问题

@Transactional事务注解与函数内多线程并发编程出现的问题

时间:2024-11-17 11:07:27浏览次数:1  
标签:事务 parallelStream 函数 Transactional 编程 list 多线程

@Transactional

@Transactional注解写在函数上之后,就表示这个函数开启了事务。事务是基于数据库连接的connect。

parallelStream

这是针对List进行多线程Stream的操作。

//对list集合开启多线程操作
list.parallelStream().forEach(item->{
//业务代码
})

@Transactional 和 parallelStream结合使用

@Transactional
public void batchUpdate(List list){
	list.parallelStream().forEach(item->{
		service.update(item);
	})
}

上面的代码表示在一个开启事务的函数中使用多线程并发更新数据。这个时候会出现一个问题,由于事务是基于数据库连接的,如果在函数中使用多线程对数据库进行操作,实际上每一个线程都对应一个数据库连接,且这些子连接并没有开启事务,也不会收到主线程中事务的约束。如果在某一个子线程中出现了错误,事务是不会发生回滚的。
解决这个问题就是检查一下代码:

  • 如果在使用了parallelStream的函数中,没有使用@Transactional直接开启事务,那么业务不会受到影响。
  • 如果在开启了事务的情况下,没有在parallelStream中进行更新/新增操作,也不会出现事务的问题。
  • 在数据量大的情况下,可以使用parallelStream在多线程中并发处理数据,接着在主线程中对数据进行新增/修改

标签:事务,parallelStream,函数,Transactional,编程,list,多线程
From: https://www.cnblogs.com/zhaoleiFree/p/18550365

相关文章

  • 14天Java基础学习——第6天:面向对象编程(类与对象)
    第6天:面向对象编程(类与对象)目标本节的目标是深入理解面向对象编程中的类与对象概念,包括类的定义、对象的创建、构造方法、封装、访问修饰符、this关键字,以及静态与实例成员。通过理论与实践相结合的方式,帮助学生全面把握这些基础概念。1.类与对象的基础1.1类的定义在Ja......
  • Linux开发工具:Vim 与 gcc,打造高效编程的魔法双剑
    文章目录一、初识Vim模式二、vim基本操作2.1基础操作2.2命令模式/正常模式2.2.1光标定位2.2.2复制粘贴、删除2.2.3撤销2.2.4替换字符2.2.5替换模式2.3底行模式2.3.1退出vim和**保存文件**2.3.2定位文本字符串2.3.3命令2.3.4实现分屏2.3.5替换指定字符串2.4补充指令2.4......
  • Spring注解@Transactional事务使用问题
    同步数据需要分批操作,每次同步1000条,都需要提交事务@ServicepublicclassMyService{@AutowiredprivateMyServiceself;//注意使用自身代理对象来触发事务//循环调用此方法@Transactional(propagation=Propagation.REQUIRES_NEW)publicvoid......
  • Cocos2d-x渲染系统多线程优化原理探索
    Cocos2d-x的渲染系统通过深度优先遍历场景树来实现高效的渲染,而将渲染过程进行Job化是提升性能的有效策略。你提到的两种策略都具有一定的合理性,但也存在各自的局限性。以下是对这两种策略的详细分析,以及如何进一步优化整个渲染过程的建议。策略1:Job化RenderCommand生成方......
  • 泷羽sec-----shell脚本编程(2--3)
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷......
  • 高并发编程/消息传递机制避免锁提高并发效率,不懂的赶紧进来(设计篇)
    在现代软件开发中,随着多核处理器的普及和分布式系统的扩展,传统的基于共享内存的并发模型正面临越来越多的挑战。消息传递机制作为一种替代方案,以其独特的异步通信和无共享状态的特性,为构建高效、可扩展和健壮的系统提供了新的思路。它通过将数据操作封装在消息中,允许系统组......
  • Wincc 7.5SP1下VBA编程练习:批量设置看见权限
    这一篇学习笔记我在新浪发表过,那边还在审核。在这里也记录一下。前两天QQ群里面有人询问能不能快速的给WINCC画面上的控件设置操作权限,这个是比较容易的。比如有个画面有10个IO域,在VBA编辑器写下面的脚本:SubIOField_PropertyTrigger1()DimobjectsDimobjDimobjdynamicDi......
  • 多线程进阶
    1.常见的锁策略如果你自己实现一把锁,你认为标准库给你提供的锁不够用,这个时候你就需要关注锁策略,其实synchronized已经非常好用了足够覆盖大多数的使用场景。这里的锁策略不是和java强相关的,其他语言但凡涉及到并发编程,设计到锁都可以谈到这样的锁策略。1.1乐观锁VS悲观锁......
  • 哋它亢编程语言3.11版本深度解析:编程界的新革命
    在技术的浪潮中,总有一些时刻标志着历史的转折点。哋它亢3.11版本的发布,正是这样一个时刻。这个版本不仅仅是一次简单的迭代,它带来了一系列创新的特性和显著的性能提升,预示着编程界的新革命。性能的飞跃:哋它亢3.11版本的发布,首先引人注目的是其性能的显著提升。根据官方数据,新版......
  • 【技术革新】哋它亢编程语言3.12版本:智能时代的新里程碑
    在技术的浪潮中,总有一些时刻标志着新时代的开始。今天,我们要探讨的“哋它亢编程语言”3.12版本,就是这样一个时刻。这个版本不仅带来了性能的飞跃,还引入了多项创新特性,为开发者提供了更广阔的舞台。3.12版本的亮点特性:性能的全面提升:哋它亢3.12版本在性能上进行了深度优化,无论......