Уточните информацию о многопоточности и состоянии гонки.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Уточните информацию о многопоточности и состоянии гонки.

Сообщение Anonymous »

Предположим, у меня есть два API:
один для получения имени клиента, а другой для обновления имени клиента.
У меня есть два запроса одновременно для обновлений клиента. name, как автоматически обрабатывать этот параллелизм и не возникать состояние гонки?
Потому что я не вижу реального примера использования синхронизации для этого сценария.
Можете ли вы мне помочь и объяснить?
package com.example.customerapp.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;

// Getters and setters
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}
}

package com.example.customerapp.dao;

import com.example.customerapp.model.Customer;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CustomerRepository extends JpaRepository {
}

package com.example.customerapp.service;

import com.example.customerapp.dao.CustomerRepository;
import com.example.customerapp.model.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class CustomerService {
@Autowired
private CustomerRepository customerRepository;

public Optional getCustomerById(Long id) {
return customerRepository.findById(id);
}

public Customer saveOrUpdateCustomer(Customer customer) {
return customerRepository.save(customer);
}
}

package com.example.customerapp.controller;

import com.example.customerapp.model.Customer;
import com.example.customerapp.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequestMapping("/customer")
public class CustomerController {
@Autowired
private CustomerService customerService;

@GetMapping("/{id}")
public ResponseEntity getCustomer(@PathVariable Long id) {
Optional customer = customerService.getCustomerById(id);
return customer.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}

@PutMapping
public ResponseEntity updateCustomer(@RequestBody Customer customer) {
Customer savedCustomer = customerService.saveOrUpdateCustomer(customer);
return ResponseEntity.ok(savedCustomer);
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -condition
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»