何回アクセスしたかのカウンタとして機能するBeanを作成する必要があります。 AtomicInteger
JEE6 @ApplicationScoped Beanと並行処理
@ApplicationScoped
class VisitsCounter {
private AtomicInteger counter;
@PostConstruct
public void construct() {
counter = new AtomicInteger(0);
}
public int visited() {
return counter.incrementAndGet();
}
}
と私は@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