JEE6 @ApplicationScoped豆和并发
2022-09-01 20:35:01
我需要写一个bean,作为它被访问了多少次的计数器。
我正在考虑用这样的豆子@ApplicationScoped
AtomicInteger
@ApplicationScoped
class VisitsCounter {
private AtomicInteger counter;
@PostConstruct
public void construct() {
counter = new AtomicInteger(0);
}
public int visited() {
return counter.incrementAndGet();
}
}
我的问题是:同时考虑多个请求可以吗?还是我需要玩和注释?我想这应该可以解决问题,但我不确定。@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的状态时应该使用并发注释和锁,但是如果我的列表已经解决了线程安全怎么办?