2011-03-08 8 views
1

@service를 사용하여 클래스에 주석을 답니다. 내 @controller 클래스는 @autowired를 통해 @service를 호출합니다. 누군가가 @ 서비스 클래스, 방법으로 예견 할 수있는 경쟁 조건?@ 서비스 및 경쟁 조건 이해

제가 있다면

public boolean dosomethinglongtime(){ 
boolean passed=false; 
//write to database... 
//do very long task; 
//if all task success, passed=true; 

return passsed 
} 

@Service

내부 메소드를 호출 제어기 dosomethinglongtime 내부 전달 부울()에서이 방법 원인 레이스 조건 문의 2 개의 다른 사용자 가능성?

글쎄, 이것은 의심의 여지가 없으며 지금까지 어떠한 경쟁 조건도 발생하지 않고 단지 의심을 해소하고 싶습니다. 고마워요

답변

1

아니요, 논리적 조건이 메서드 호출에 적용되므로 해당 코드의 (Java 관점에서 볼 때) 경쟁 조건이 없습니다. 부울이 인스턴스 또는 클래스 속성이면 동시성 문제가 발생할 수 있습니다. 이상적으로, 귀하의 서비스는 경쟁 조건을 피하기 위해 무국적이어야합니다. 그렇지 않은 경우, 클래스를 동기화 시키거나 concurrent package에서 난해한 것을 사용해야합니다.

2 명의 사용자가 DB의 동일한 레코드를 쓰거나 업데이트하지 못하도록하려면 optimistic locking 또는 pessimistic locking과 같은 잠금 메커니즘을 사용해야합니다. 링크는 최대 절전 모드 문서로 이동하지만 대부분의 ORM은 두 가지 잠금 메커니즘을 모두 지원합니다.

관련 문제