`

Synchronized和@Transactional 使用时,同步失效。

    博客分类:
  • JAVA
 
阅读更多

Synchronized 的用法问题。

8月份在做一个系统的用户提现功能,为控制并发,想过在用Synchronized method(){}或者method(){ Synchronized(this){ } }来控制,两个同样的记录去做并发提现测试,同步方法或者代码块并没有起作用。Synchronized加在@Transactional事务注解的方法时,同步并不起作用,可以新建不带用事务注解的同步方法,然后再调用method。

 

1:原接口实现同步实现方法

 

同步方法或者同步方法块都不能达到同步的作用。

 

@Service
public class SynchronizedService{

	@Transactional(readOnly = false,rollbackFor = SLException.class)
	public synchronized void synMethodOne() throws SLException{
	
	}
	
}

 

 

@Service
public class SynchronizedService{

	@Transactional(readOnly = false,rollbackFor = SLException.class)
	public void synMethodTwo() throws SLException{
		synchronized(this){
			
		}
	}
	
}

 

2:修改后的方法。

 

@Service
public class SynchronizedNoTransService {

	@Autowired
	SynchronizedService synchronizedService;
	
	public synchronized void synMethod() throws SLException{
		synchronizedService.synMethodTwo();
	}
	
}




@Service
public class SynchronizedService{

	@Transactional(readOnly = false,rollbackFor = SLException.class)
	public void synMethodTwo() throws SLException{
			
	}
	
}

 

备注:关于Synchronized的学习可以参考

1:Synchronized 方法和代码块的那个用法好一些比较。

2:关键字Synchronized的使用注意事项。

 

分享到:
评论

相关推荐

    springboot中事务管理@Transactional的注意事项与使用场景

    在本篇文章中,我们将详细讲解 SpringBoot 中事务管理 @Transactional 的注意事项与使用场景,以帮助开发者更好地理解和使用 @Transactional 注解。 什么是 @Transactional @Transactional 是 Spring 框架提供的一...

    java中synchronized用法

    "Java 中 synchronized 用法详解" Synchronized 是 Java 语言中用于解决多线程共享数据...synchronized 关键字是 Java 语言中解决多线程共享数据同步问题的重要工具,但需要正确地使用它,以免造成死锁和系统开销。

    正确使用多线程同步锁@synchronized()1

    本文将深入探讨`@synchronized`的工作原理、特点以及使用时需要注意的事项。 首先,`@synchronized`的原理是基于递归互斥锁(Recursive Mutex)。在Objective-C中,当你使用`@synchronized`块包围一段代码时,会为...

    java同步synchronized关键字用法示例

    - **代码块同步:** 也可以使用`synchronized`关键字来同步代码块,这样可以更细粒度地控制同步范围,提高程序性能。 ```java public void method() { synchronized (object) { // 代码块 } } ``` 这里的`object...

    NSLock和@synchronized

    在iOS和macOS的开发中,多线程同步是非常关键的一个环节,...在设计多线程代码时,应尽可能减少共享状态,优先考虑使用无状态或不可变的数据结构,以及使用GCD(Grand Central Dispatch)等并发工具来简化同步问题。

    详细解读java同步之synchronized解析

    【Java同步之synchronized解析】 Java中的`synchronized`关键字是实现多线程同步的重要机制,它确保了在并发环境中对共享资源的访问是线程安全的。以下是对`synchronized`的详细解读: ### 1. synchronized的特性 ...

    25.线程的同步机制-synchronized同步语句-使用同步代码块解决同步方法的弊端.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    synchronized用法大全实例

    本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...

    使用synchronized实现多线程同步.pdf

    在Java编程中,多线程同步是一个至关重要的概念,它确保了多个线程在访问共享资源时能够有序进行,防止数据不一致性和竞态条件。`synchronized`关键字是Java中实现线程同步的主要手段之一。这篇文档主要讨论了如何...

    Synchronized关键字的用法

    4. **同步局部变量**:如果需要同步的资源是局部变量,则可以使用`synchronized`来声明一个代码块,将局部变量作为锁。 - 示例: ```java public void method() { Object localLock = new Object(); ...

    Java synchronized使用案例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。这个关键词提供了互斥锁机制,防止多个线程同时执行同一段代码,确保了线程安全。 一、`...

    OC-@synchronized

    因此,需要谨慎使用,避免过度使用同步。 4. **自旋锁与阻塞锁**:`@synchronized` 实现的是阻塞锁,即当锁被其他线程持有时,等待的线程会被挂起,直到锁被释放。相比于自旋锁(线程不断检查锁是否可用),阻塞锁...

    [JAVA][synchronized的使用]

    - 性能开销:由于同步会带来上下文切换和锁竞争,所以过多使用`synchronized`可能导致性能下降。 - 无法中断:等待获取锁的线程无法被中断,除非调用`interrupt()`方法或者抛出异常。 - 不可中断的阻塞:`...

    Java 同步锁(synchronized)详解及实例

    如果我们只想锁定代码的一部分,可以使用同步代码块,格式如下: ```java synchronized (object) { // 需要同步的代码 } ``` 其中,`object`是监视器对象,每个线程在进入同步块之前必须先获得监视器对象的...

    java中synchronized(同步代码块和同步方法)详解及区别

    然而,选择同步代码块还是同步方法取决于实际需求,如果需要保护的方法内所有代码都应同步,使用同步方法更加简洁。 总的来说,`synchronized` 关键字是Java中实现线程同步的关键工具,它可以防止数据的不一致性,...

    java Thread & synchronized & concurrent 线程、同步、并发

    总之,理解和掌握Java中的线程、同步和并发是构建高效、可扩展的多线程应用程序的关键。合理地使用这些工具和机制,可以帮助我们编写出更加健壮、高效的代码。在实际开发中,根据具体需求选择合适的方法,平衡性能和...

    Android synchronized 测试案例

    本测试案例深入探讨了`synchronized`的使用方法,包括同步单个对象、同步多个对象以及成功与失败的场景对比。 一、`synchronized`关键字的基本概念 `synchronized`关键字可以修饰方法或用作代码块,其主要作用是...

    14.线程的同步机制-synchronized同步方法-局部变量为线程安全.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    使用synchronized实现多线程同步[借鉴].pdf

    总之,`synchronized`关键字是Java中实现线程同步的关键手段,它可以确保共享数据在多线程环境中的正确性,但也需要谨慎使用,以避免可能导致的问题。在实际开发中,根据具体需求选择合适的方法来实现同步是至关重要...

Global site tag (gtag.js) - Google Analytics