Synchronized로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

Synchronized로 검색한 결과
등록일:2008-03-03 10:06:27
작성자:
제목:synchronized 에 대해 생각 해보자




1.  Synchronized는  무엇을  지키고  있는  것일까?

      공유되어  지는  필드가  복수의  쓰래드에서  동시에  접근  되지  않도록  지킨다.

    그럼..  Synchronized된  메서드가  지키는  자원이  다른  곳에서도  잘지키고  있을까?

2.  어떤  단위로  지켜야  할까?

    만약  두개의  필드를  Synchronized메서드가  지키고  있는데  그  두개의  필드에  각각  접근하는  메서드는  Synchronized  해도  소용없다..

    ※  필드를  통합하여  지켜야  한다.

    ex)

        private  String  name  =  "Nobody";
        private  String  address  =  "Nowhere";
        public  Synchronized  void  pass(String  name,  String  address)  {
                this.counter++;
                this.name  =  name;
                this.address  =  address;
                check();
        }
        public  Synchronized  String  toString()  {
                return  "No."  +  counter  +  ":  "  +  name  +  ",  "  +  address;
        }

        //  아래  메서드  들은  Synchronized  로  지키는  위의  메서드들을  무의미  하게  한다.
        public    Synchronized  setName(String  name)  {

                this.name  =  name;

        }

        public    Synchronized  setAddress(String  address)  {

                this.address  =  address;

        }

  

    3.  어느  락을  사용해서  지키고  있는가?

        Synchronized  한  인스턴스  메소드를  실행하는  쓰래드는  this의  락을  취해야  한다.

        Synchronized  (obj)  {

                ....

        }

        락을  취해야  하는  인스턴스를  obj로  지정하고  있는데  이  인스턴스를  틀리지  않도록  주의해야  한다.  틀린  인스턴스의  락을  취하는  것은  자신의  집을  지키려고  하면서  옆집에  자물쇠를  잠그는  것과  같은것이다.

  

    4.  극소의  조작

      Synchronized  메소드는  동시에  하나의  쓰레드만이  실행할  수  있다.  하나의  쓰레드가  Synchronized  메소드를  사용하면  다른  쓰레드가  그  메소드에  들어갈  수  없다.  Synchronized  가  행하고  있는  조작은  멀티  쓰레드  입장에서는  [분할  가능한  조작]이다.  이러한  분할  가능한  조작을  일반적으로  극소(atomic)의  조작  이라한다.

  

    5.  long  과  double은  극소로  다루어  지지  않는다.  <=  자바  언어  사양에서

      int,  char  참조형에  대입하는  것은  극소이나  long과  double에  대한  대입은  극소가  아니다.

      즉  멀티  쓰래드가  long값에  값을  대입  하면  읽을때  자신이  넣은  값인지  아닌지는  보장이  되지  않는다.

      volatile  이라는  키워드를  사용하면  그  필드는  극소의  조작이  된다.

  

-  출처  :  자바  언어로  배우는  디자인  패턴  입문  [멀티쓰레드]  에  있는  내용을  정리함.

출처  [자바]  Synchronized  에  대해  생각  해보자|작성자  래이도