개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.19 23:16

Threaded::synchronized 관련 질문

목록
  • 함수형광신도 1일 전 2025.03.19 23:16
  • 5
    1
제가 Java에서 Threaded::synchronized 블록을 사용하여 동기화하는 방법을 배웠습니다. 하지만, synchronized 블록 내에서 지역 변수의 동기화에 대해 궁금합니다.

예를 들어, 아래 코드를 보겠습니다.
java

public class Test {

    private int x = 0;



    public void test() {

        synchronized (this) {

            int temp = x; // 지역 변수 temp

            x = x + 1;

            System.out.println(temp);

        }

    }

}


위 코드에서, 지역 변수 temp는 synchronized 블록 내에서 동기화되는지 궁금합니다.

위 코드에서 지역 변수 temp는 synchronized 블록 내에서 동기화되지 않는 이유가 무엇인가요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    Java의 synchronized 블록은 해당 블록 내에서 공유 변수에 대한 접근을 동기화합니다. 하지만, 지역 변수는 스레드 간에 공유되지 않기 때문에 synchronized 블록 내에서 지역 변수에 대한 동기화는 필요하지 않습니다.

    위 코드에서 지역 변수 temp는 스레드 간에 공유되지 않기 때문에 synchronized 블록 내에서 동기화되지 않습니다. temp 변수는 각 스레드에서 독립적으로 생성되며, 다른 스레드에 의해 수정되지 않습니다.

    따라서, 위 코드에서 temp 변수의 출력은 항상 0이 됩니다. 이 이유는 temp 변수가 지역 변수이기 때문입니다.

    만약, 공유 변수 temp를 사용한다면 synchronized 블록 내에서 temp 변수에 대한 동기화가 필요합니다.

    예를 들어, 아래 코드를 보겠습니다.

    #hostingforum.kr
    java
    
    public class Test {
    
        private int x = 0;
    
        private int temp = 0;
    
    
    
        public void test() {
    
            synchronized (this) {
    
                temp = x; // 공유 변수 temp
    
                x = x + 1;
    
                System.out.println(temp);
    
            }
    
        }
    
    }
    
    


    위 코드에서 temp 변수는 공유 변수이기 때문에 synchronized 블록 내에서 동기화가 필요합니다.

    2025-03-19 23:17

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 5,007건 / 12 페이지

검색

게시물 검색