Ⅴ. Thread 동기화
1. 동기화(synchronized)
// Example
package sample;
// 순차적인 동작을 처리할 때, 싱크가 맞지 않는 부분을 고쳐보자
// → synchronized 키워드 적용
class Counter {
private int count = 0;
// 메소드 간의 동기화가 이루어짐.
// 따라서 다른 메소드의 동작 시, 침범하지 않고 기다림
public void increment() {synchronized(this) {count++;}}
public void decrement() {synchronized(this) {count--;}}
public int getCount() {return count;}
}
public class Main {
static Counter a = new Counter(); // main은 스태틱메모리라서 스태틱을 추가
static class Incre implements Runnable {
public void run() {
for(int i = 0; i < 1000; i++) {
a.increment();
}
}
}
static class Decre implements Runnable {
public void run() {
for(int i = 0; i < 1000; i++) {
a.decrement();
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new Incre());
Thread t2 = new Thread(new Decre());
t1.start();
t2.start();
// 스레드의 동작이 오래걸릴 경우를 대비하는 방법
// join() : 스레드가 작업을 끝날 때까지 프로세스가 안 끝나게 함
try {
t1.join();
t2.join();
} catch(Exception e) {
e.printStackTrace();
}
System.out.println(a.getCount()); // 0
}
}
'Programming Language > Java' 카테고리의 다른 글
BigInteger Class (0) | 2022.07.18 |
---|---|
제네릭(Generic) (0) | 2022.07.18 |
스레드(Thread) - 4. Thread의 속성 (0) | 2022.07.15 |
스레드(Thread) - 3. Thread의 생성 및 실행방법 (0) | 2022.07.15 |
스레드(Thread) - 2. Multi-Thread의 필요성 (0) | 2022.07.15 |