Open berryberrybin opened 2 years ago
<body>
<%
//1. 기존 counter 값을 읽어옴
Object obj = application.getAttribute("count");
//2. 만약 없으면 0으로 세팅
if(obj==null){
application.setAttribute("count",0);
obj = application.getAttribute("count");
}
//3. 읽어온 데이터에 +1해서 저장하고 출력
int count = (Integer)obj;
//application.setAttribute("count", ++count); - 문제점 : 새로고침할때마다 방문자수가 1씩 증가함
// 새로운 세션(유져)일때만 count가 1씩 증가하도록 함
if(session.isNew()){
count++;
application.setAttribute("count", count);
}
%>
<h1> 방문자수 : <%=count%> 명 </h1>
</body>
: 멀티쓰레드 환경에서 동시성 보장
<%
Object obj = application.getAttribute("count");
if(obj==null){
application.setAttribute("count", new AtomicInteger());
obj=application.getAttribute("count");
}
AtomicInteger atomic = (AtomicInteger)obj;
int count = atomic.intValue();
if(session.isNew()){
count = atomic.incrementAndGet();
}
%>
1. volatile
2. synchronized
3. Atomic 클래스
CAS 알고리즘
incrementAndGet() 메소드
선언부 volatile int value;
application
Session
크롬으로 실행 후 사파리 브라우져 사용시 결과