얼마나 자주 액세스했는지에 대한 카운터 역할을하는 bean을 작성해야합니다. 동시에 여러 요청을 고려할 때 확인된다JEE6 @ApplicationScoped bean and concurrency
그
@ApplicationScoped
class VisitsCounter {
private AtomicInteger counter;
@PostConstruct
public void construct() {
counter = new AtomicInteger(0);
}
public int visited() {
return counter.incrementAndGet();
}
}
내 질문처럼 AtomicInteger
로 @ApplicationScoped
콩을 사용한다 생각 해요? 또는 @ConcurrencyManagement
및 @Lock
주석을 가지고 놀 필요가 있습니까? Atomic*
이 트릭을해야한다고 생각하지만 확실하지 않습니다.
필드로 스레드 안전 컬렉션이있는 경우에도 마찬가지입니까? 예 : 내가 가지고 있다고 말해
@ApplicationScoped
class ValuesHolder {
private List<String> values;
@PostConstruct
public void construct() {
values = Collections.synchronizedList(new LinkedList<String>());
}
public void insert(String value) {
values.add(value);
}
public String remove(String value) {
return values.remove(value);
}
}
은 정말로 스레드 안전합니까?
Bean의 상태가 변경되었을 때 병행 주석과 잠금을 사용해야하지만 내 목록이 이미 스레드 안전을 처리한다면 어떻게 될까요?
구현 된대로 동시성 문제가 발생하지 않습니다. – McDowell