소스==================================================
package javaio.ex211;
import java.util.Random;
public class ThreadLocalTest {
static volatile int counter = 0;
private static void displayValues(){
System.out.println("Thread Name : "+Thread.currentThread().getName()
+ ", counter : "
+ counter);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
displayValues();
Runnable runner = new Runnable(){
public void run(){
synchronized (ThreadLocalTest.class) {
counter++;
}
displayValues();
}
};
for(int i=0;i<6;i++){
Thread t = new Thread(runner);
t.start();
Thread t1 = new Thread(runner);
t1.start();
}
}
}
문제는.. 바로 이부분....
synchronized (ThreadLocalTest.class) {
counter++;
}
이렇게 동기화 시켰는데...결과를 보면..
Thread Name : main, counter : 0
Thread Name : Thread-0, counter : 1
Thread Name : Thread-2, counter : 2
Thread Name : Thread-3, counter : 3
Thread Name : Thread-1, counter : 4
Thread Name : Thread-4, counter : 5
Thread Name : Thread-5, counter : 6
Thread Name : Thread-6, counter : 7
Thread Name : Thread-7, counter : 8
Thread Name : Thread-8, counter : 9
Thread Name : Thread-9, counter : 10
Thread Name : Thread-11, counter : 12
Thread Name : Thread-10, counter : 12
이렇게 출력되네여..
제 생각에는.. 우흠.....counter의 숫자가 중복이 되면 안될거 같은데.... 왜 저럴까여..
제가 잘못이해 하고있는건가여?
카페 게시글
Q & A..
java Thraed synchronize 질문이여
다음검색
첫댓글 중복되지 않고, 정상적으로 나오는데요.
아.. 우흠.. 중복되는데... 암튼 위의 소스는.. 출력시 동기화를 안해주어서 하나의 값이 여러번 출력되어 그런것으로 판명~~~^^ displayValues();를 synchronized안에 넣어주니 제대로 되네여^^