synchronized 를 걸어주지 않으면
작업이 끝나기전에 공유가 되어버려 예상할 수 없는 결과가 나온다.
이를 방지하기 위해 제공하는 기능이 동기화 synchronized 이다.
consol 결과 -----
3000000
ex------------------
public class ThreadCore_N07 {
public static void main(String[] args) {
Increment inc = new Increment();
IncThread it1 = new IncThread(inc);
IncThread it2 = new IncThread(inc);
IncThread it3 = new IncThread(inc);
it1.start();
it2.start();
it3.start();
try {
it1.join();
it2.join();
it3.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(inc.getNum());
}
}
class Increment {
int num = 0;
// 하나의 작업이 끝날때까지 공유를 하지 않도록 해주는 기능.
// synchronized 를 걸어줘야 한다.
// Method 동기화
//synchronized 를 빼고 실행하면 다른 결과를 볼 수 있다.
public synchronized void increment() {
num++;
/*
* Block 동기화
* Method 동기화 보다 Block 동기화를 주로 사용함.
* Method 동기화는 단위 자체가 크기때문에 성능이 떨어짐.
* synchronized(this){
num++;
}*/
}
public int getNum() {
return num;
}
}
class IncThread extends Thread {
Increment inc;
public IncThread(Increment inc) {
this.inc = inc;
}
public void run() {
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
inc.increment();
}
}
}
}
'WebStudy > JAVA' 카테고리의 다른 글
Network 네트워크 들어가기 전 토막 상식 - 0 (0) | 2015.06.04 |
---|---|
특수문자 공백 체크. Pattern, Matcher (0) | 2015.06.03 |
Thread (쓰레드) 우선순위 양보 -3 (0) | 2015.06.03 |
Thread (쓰레드) Join() - 04 (0) | 2015.06.03 |
Thread (쓰레드 ) 우선권을 위한 Blocking Method -2 (0) | 2015.06.03 |