import java.io.*;
public class SynchronizedEx01 extends Thread {
static int count;
public void run() {
for (int i=0; i<5; i++) {
synchronized(this) {//this
//synchronized(SyncTest.class) {//.class
counter();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
public void counter() {
System.out.println(Thread.currentThread().getName() + " : " + count);
++count;
}
public static void main(String[] args) throws IOException {
SynchronizedEx01 t1 = new SynchronizedEx01();
SynchronizedEx01 t2 = new SynchronizedEx01();
t1.start();
t2.start();
}
}
this는 객체 인스턴스에 대한 동기화
여러개의 쓰레드객체를 생성하는 경우에는 t1, t2가 서로 다른 this를 가지기 때문에
t1, t2의 동기화는 안 된다.
.class에 대한 동기화는 class자체에 대한 동기화
따라서 .class를 통해서 생성하는 모든 쓰레드에 대해 동기화가 이루어진다.
삽질하기/JAVA
synchronized(this)와 synchronized(.class)의 차이점
반응형