
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