Pio*_*ler 0 java concurrency multithreading counter volatile
我在Sun的"Core Servlets和JavaServer Pages vol 2"中看到了一个带会话计数器的例子.
计数器只需构建,HttpSessionListener并使用sessionCreated/ 递增/递减会话计数sessionDestroyed:
public class SessionCounter implements HttpSessionListener {
private int currentSessionCount = 0;
public void sessionCreated(HttpSessionEvent event) {
currentSessionCount++;
}
...
public int getTotalSessionCount() {
return(totalSessionCount);
}
... // counter decrement, self registering in context attribute etc.
Run Code Online (Sandbox Code Playgroud)
监听器在上下文中注册自己,因此servlets可以访问它并获得计数器值.
没有同步块.
它安全吗,currentSessionCount不是volatile吗?
可以currentSessionCount缓存在CPU寄存器中,并且对于提供请求的其他线程的精确值是不可见的servlets?
这样会很安全.
public class HttpSessionListenerTest implements HttpSessionListener {
final private AtomicInteger sessionCount = new AtomicInteger(0);
@Override
public void sessionCreated(HttpSessionEvent event) {
sessionCount.incrementAndGet();
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessionCount.decrementAndGet();
}
public int getTotalSessionCount() {
return sessionCount.get();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4191 次 |
| 最近记录: |