반응형
자바에서 동기화(Synchronized)는
여러 쓰레드에서 한 메소드를 사용 시
하나의 쓰레드만 접근 가능하게 해주는데
위 예제를 보면 3과 7을 4번씩 증가시켜주는
쓰레드 2개를 생성한 것이 보이는데
실제 실행 시 두 스레드가 동시에 increMethod를 사용하는 것이 보인다
여기서 여러 쓰레드가 특정 메소드를
동시에 사용하면 안되는 경우에
동기화를 사용해서 한 쓰레드가 특정 메소드를 사용 시
해당 쓰레드가 메소드를 끝마치기 전에는
다른 쓰레드가 메소드로 들어오지 못하게 할 수 있는데
사용방법은 메소드 왼쪽에 synchronized를 추가해 주면 된다
increMethod를 동기화 설정한 후에
코드를 실행해 보니
한 쓰레드가 메소드를 수행한 후에
다른 쓰레드가 들어와 메소드를 수행하는 것이 보인다
정리해보자면
동기화(Synchronized)란 여러 쓰레드가 한 메소드 수행 시
한번에 하나씩만 수행 가능하도록 만드는 것!
예제에 사용한 코드는 아래와 같다
class MethodClass {
public synchronized void increMethod(int i) {
for(int j = 0; j<5; j++) {
System.out.println(j * i); // i * j 출력
try {
Thread.sleep(400); // 쓰레드가 너무 빨리 진행되서..
} catch(Exception e) {
}
}
}
}
class ThreadClass extends Thread { // 쓰레드
MethodClass mc;
int i;
public ThreadClass(MethodClass mc, int i) {
this.mc = mc;
this.i = i;
}
public void run() {
mc.increMethod(i);
}
}
public class SyncExample {
public static void main(String[] args) {
MethodClass mc = new MethodClass();
ThreadClass tc1 = new ThreadClass(mc, 3);
ThreadClass tc2 = new ThreadClass(mc, 7);
tc1.start();
tc2.start();
}
}
반응형
'Language > Java' 카테고리의 다른 글
자바 삼항연산자 개념부터 예제까지 (0) | 2020.03.23 |
---|---|
자바 명명규칙 가이드 (0) | 2020.03.16 |
자바 자료구조 총정리 (0) | 2020.02.23 |
자바 Queue 예제부터 사용법까지 (0) | 2020.02.23 |
자바 Stack 예제부터 사용방법까지 (0) | 2020.02.23 |
댓글