我是新来的使用并发编程技术的人,想知道如果在多线程中执行以下流程是否会引起问题。
请考虑以下实体:
@Getter
@Setter
@Table(name = "CAR")
@Entity
public class Car {
@Id
private BigInteger id;
@Column(name = "model")
private String model;
}
存储库为:
@Service
public interface CarRepository extends JpaRepository<Car, BigInteger>{
}
我只是想知道两个线程是否同时处于同步方法中,是否有机会获得DuplicateKeyException?还是由于多线程而导致以下同步方法出现异常?
@Transactional
public void sync(final BigInteger id) {
Car car = new Car(id, ....);
Car someOtherCar = new Car(....);
carRepository.save(car);
carRepository.save(someOtherCar);
carRepository.flush();
}
我尝试了以下代码进行测试,目的是将相同的汽车规格两次插入一个线程中,并且没有问题。
@Transactional
public void sync(final BigInteger id) {
Car car = new Car(id, ....);
Car sameCar = new Car(id, ....);
carRepository.save(car);
carRepository.save(sameCar);
carRepository.flush();
}
请让我知道您对此的想法。谢谢