berryberrybin / kosta-jsp

jsp study
0 stars 0 forks source link

application 내장객체 및 AtomicInteger 활용 #8

Open berryberrybin opened 2 years ago

berryberrybin commented 2 years ago

application

image

Session

image


크롬으로 실행 후 사파리 브라우져 사용시 결과

image

berryberrybin commented 2 years ago

image

<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>

AtomicInteger이용하여 구현

: 멀티쓰레드 환경에서 동시성 보장

<%
    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();
    }
%>
berryberrybin commented 2 years ago

JAVA에서 동시성 문제해결 방법

1. volatile

2. synchronized

3. Atomic 클래스


AtomicInteger

Atomic 클래스 내부구조 특징

CAS 알고리즘

incrementAndGet() 메소드

선언부 volatile int value;